正确的方式来获得在Windows商店应用CoreDispatcher(Correct way to

2019-09-02 11:23发布

我建立一个Windows应用商店的应用程序,我有一些代码,需要被发布到UI线程。

对于这一点,我想找回CoreDispatcher并用它来发布的代码。

它似乎有几个方法可以做到这一点:

// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;

// Second way
Window.Current.Dispatcher;

我不知道哪一个是正确的? 或者两者是等价的?

Answer 1:

这是首选的方法:

Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
    // Your UI update code goes here!
});

这样做的好处是,它得到的主要CoreApplicationView ,因此始终可用。 更多细节在这里 。

还有,你可以使用两个备选方案。

第一种选择

Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher

这得到了应用程序的活动视图,但是这会给你 ,如果没有意见已被激活。 更多细节在这里 。

第二个选择

Window.Current.Dispatcher

该解决方案将无法正常工作时,它从另一个线程调用,因为它会返回null而不是UI调度的。 更多细节在这里 。



Answer 2:

对于使用C ++ / CX任何人

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
    CoreDispatcherPriority::Normal,
    ref new Windows::UI::Core::DispatchedHandler([this]()
{
    // do stuff
}));


Answer 3:

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
            CoreDispatcherPriority.Normal,
            () => { // your code should be here});


Answer 4:

其实,我建议在东西这行:

return (Window.Current == null) ? 
    CoreApplication.MainView.CoreWindow.Dispatcher : 
    CoreApplication.GetCurrentView().CoreWindow.Dispatcher

这样一来,如果您有双头呆另一个视图/窗口,你不会得到调度员迷茫......

这个小宝石检查是否有甚至一个窗口。 如果没有,使用的MainView的调度。 如果有一种观点,使用一个的调度。



文章来源: Correct way to get the CoreDispatcher in a Windows Store app