为什么我不能从Action投射到DispatchedHandler?

时间:2018-10-23 14:33:37

标签: c# uwp

G'day乡亲,

我觉得我看不到基本的东西。

Action被定义为公共委托void Action()。

DispatchedHandler被定义为公共委托void DispatchedHandler()。

但是,在RunASync行中生成了以下代码:错误CS1503参数2:无法从“ System.Action”转换为“ Windows.UI.Core.DispatchedHandler”。

public static async Task DispatchToUI(Action action, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal )
{
    if (CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
    {
        action();
    }
    else
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( priority, action );
    }
}

因此添加显式转换:

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( priority, (DispatchedHandler)action ); 

出现错误CS0030失败,无法将类型'System.Action'转换为'Windows.UI.Core.DispatchedHandler'。

那么一个版本的公共代表void()不能转换为另一个版本的公共代表void()吗?

1 个答案:

答案 0 :(得分:2)

您不能像这样转换代表,请检查this这样的问题。

但是,您可以从现有的代理中创建一个新的代理:

public static async Task DispatchToUI(Action action, CoreDispatcherPriority priority = CoreDispatcherPriority.Normal)
{
    if (CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess)
    {
        action();
    }
    else
    {
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(priority, new DispatchedHandler(action));
    }
}