private readonly CoreDispatcher dispatcher;
我正在初始化上面的字段在构造函数CoreWindow.GetForCurrentThread().Dispatcher;然后我在它周围包装了一个函数:
public async Task OnUiThread(Action action)
{
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => action());
}
并在需要时使用此函数将调用转移到uthread。
由于我在应用程序的每个页面上都这样做,所以我决定创建一个静态类,例如
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。为什么?
那么,您将根据发生的任何线程初始化类来初始化CoreDispatcher
。考虑到您确实希望为特定的调度程序完成它,我觉得这是一个坏主意。
如果您正在从一个页面中使用它,那么您就不能为该页面使用分派器吗?我不明白为什么你需要一个dispatcher
变量…你可以考虑为OnUiThread
写一个扩展方法。
同样,您不需要在这里使用async
/await
—或者lambda表达式。你可以使用:
public static Task OnUiThread(this CoreDispatcher dispatcher, Action action)
{
return dispatcher.RunAsync(CoreDispatcherPriority.Normal,
new DispatchedHandler(action))
.AsTask();
}