在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的分派器。 如果有一个视图,使用那个人的分派器。