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