uwp - 如何从后台线程获取 UWP 应用程序的当前 View ?

标签 uwp windows-10-universal

在我的 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给我trueiteratingview是主视图和 falseiteratingview是辅助 View ,这意味着 CoreApplication.GetCurrentView()返回我正在调用的调度程序内的 View 。 ApplicationView.GetForCurrentView()也有同样的行为。

但我的要求是确定用户当前所在的窗口/ View 。

我做错了什么吗,或者有其他方法可以从后台线程获取当前窗口的调度程序吗?

最佳答案

最好的解决方案是将两者解耦并使用后台线程中的事件。这样,任何想要显示信息的前台窗口都可以订阅该事件,并且后台线程不需要知道哪个窗口是事件的等,也不必担心哪个线程要显示将调用分派(dispatch)到(订阅事件的窗口可以使用自己的Dispatcher轻松地进行分派(dispatch)。

关于uwp - 如何从后台线程获取 UWP 应用程序的当前 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52648176/

相关文章:

uwp - DeviceCodeProvider 在哪里?

c# - 在 Xamarin Forms 中更改 BindableProperty 时不调用自定义控件 OnElementChanged

uwp - 如何使用 IVector 的 ReplaceAll 方法将数据从一个 IVector 传输到另一个 IVector?

c# - UWP 值不能为空。参数名称 : path1

xaml - 应用内日历上的周 View (通用 Windows 平台/UWP)

azure-active-directory - Microsoft Store 集合 REST API,创建 Azure AD 访问 token 返回 404

javascript - Windows 通用 JavaScript 运行时错误 : 'WinJS' is undefined

c# - 为什么不能在 x :Bind? 中使用 TargetNullValue

XAML:将椭圆与均匀拉伸(stretch)对齐到中心

c# - 在后端以编程方式更改 XAML Listview 的 ItemTemplate