private readonly CoreDispatcher dispatcher;
我正在构造函数中将上面的字段初始化为CoreWindow.GetForCurrentThread()。Dispatcher; 然后我用它包裹了一个函数:
public async Task OnUiThread(Action action)
{
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => action());
}
并使用此功能将调用转移到所需的UIThread whneva。它工作正常。
因为我在我的应用程序的每个页面上都这样做,所以我决定rathar制作一个静态的类说
public static class ThreadManager
{
private static readonly CoreDispatcher dispatcher;
static ThreadManager()
{
dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
}
public static async Task OnUiThread(Action action)
{
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => action());
}
}
但是现在当我尝试在我的页面上使用它来将调用转移到UI线程时,我得到了对象null异常,并且调度程序在其他页面上显示为null,其中我调用了这个静态类。为什么?
答案 0 :(得分:2)
好吧,你是根据发生的发生的1>初始化CoreDispatcher
来初始化类。鉴于你真的希望它为特定的调度员完成,这对我来说感觉不错。
鉴于您在页面中使用此功能,您是否不能使用该页面的调度程序 ?我不明白为什么你需要一个dispatcher
变量......你可能会考虑为OnUiThread
编写一个扩展方法。
此外,您实际上不需要在此使用async
/ await
- 或lambda表达式。你可以使用:
public static Task OnUiThread(this CoreDispatcher dispatcher, Action action)
{
return dispatcher.RunAsync(CoreDispatcherPriority.Normal,
new DispatchedHandler(action))
.AsTask();
}