我建立一个Windows应用商店的应用程序,我有一些代码,需要被发布到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
,因此始终可用。 更多细节在这里 。
还有,你可以使用两个备选方案。
第一种选择
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher
这得到了应用程序的活动视图,但是这会给你空 ,如果没有意见已被激活。 更多细节在这里 。
第二个选择
Window.Current.Dispatcher
该解决方案将无法正常工作时,它从另一个线程调用,因为它会返回null而不是UI调度的。 更多细节在这里 。
对于使用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
这样一来,如果您有双头呆另一个视图/窗口,你不会得到调度员迷茫......
这个小宝石检查是否有甚至一个窗口。 如果没有,使用的MainView的调度。 如果有一种观点,使用一个的调度。