静态域初始化


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();
}

相关内容

  • 没有找到相关文章