在Windowsapp store应用中获取CoreDispatcher的正确方法

我正在构build一个Windowsapp store应用程序,我有一些代码需要发布到UI线程。

为此,我想检索CoreDispatcher并使用它来发布代码。

看来有几种方法可以这样做:

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

我想知道哪一个是正确的? 或者两者是否相同?

这是首选的方法:

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

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

有两种select,你可以使用。

第一个select

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

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

第二个select

 Window.Current.Dispatcher 

当从另一个线程调用这个解决scheme时它将不起作用,因为它将返回null而不是UI Dispatcher 。 更多细节在这里 。

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

 Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync( CoreDispatcherPriority::Normal, ref new Windows::UI::Core::DispatchedHandler([this]() { // do stuff })); 
 await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, () => { // your code should be here}); 

其实我会提出一些这样的话:

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

这样,你应该打开另一个视图/窗口,你不会得到调度员困惑…

这个小gem检查是否有一个窗口。 如果没有,请使用MainView的分派器。 如果有一个视图,使用那个人的分派器。