在我的 UWP 应用中,当调用成功时,我需要向用户显示通知。此通知必须显示在用户所在的当前窗口中。我只会在后台线程中了解 post 调用是否成功。因此,一旦我从服务器收到成功代码,我需要确定哪个是当前窗口,并且必须在该窗口中向用户显示通知。
Window.Current
从后台线程访问时给我 null。
如果我尝试访问Window.Current
CoreApplication.MainView.Dispatcher.RunAsync
内它给了我主窗口。
如果我尝试访问CoreApplication.GetCurrentView().CoreWindow.Dispatcher
来自后台线程 CoreApplication.GetCurrentView()
抛出以下异常
Exception = {System.Runtime.InteropServices.COMException (0x80070490): Element not found.
Element not found.
at Windows.ApplicationModel.Core.CoreApplication.GetCurrentView()
我进行了一小轮分析,以了解以下代码片段发生了什么。
foreach (var iteratingview in CoreApplication.Views)
{
iteratingview.Dispatcher.RunOnUIThread(() =>
{
int id = ApplicationView.GetForCurrentView().Id;
bool main = CoreApplication.GetCurrentView().IsMain;
bool isMain = iteratingview.IsMain;
});
}
bool 值CoreApplication.GetCurrentView().IsMain
给我true
当 iteratingview
是主视图和 false
当 iteratingview
是辅助 View ,这意味着 CoreApplication.GetCurrentView()
返回我正在调用的调度程序内的 View 。 ApplicationView.GetForCurrentView()
也有同样的行为。
但我的要求是确定用户当前所在的窗口/ View 。
我做错了什么吗,或者有其他方法可以从后台线程获取当前窗口的调度程序吗?
最佳答案
最好的解决方案是将两者解耦并使用后台线程中的事件。这样,任何想要显示信息的前台窗口都可以订阅该事件,并且后台线程不需要知道哪个窗口是事件的等,也不必担心哪个线程要显示将调用分派(dispatch)到(订阅事件的窗口可以使用自己的Dispatcher
轻松地进行分派(dispatch)。
关于uwp - 如何从后台线程获取 UWP 应用程序的当前 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648176/