Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我不能从Action转换为DispatchedHandler吗?_C#_Uwp - Fatal编程技术网

C# 为什么可以';我不能从Action转换为DispatchedHandler吗?

C# 为什么可以';我不能从Action转换为DispatchedHandler吗?,c#,uwp,C#,Uwp,G'day的朋友们 我觉得我看不到一些基本的东西 定义为公共委托无效操作() 定义为公共委托void DispatchedHandler() 但是在RunASync行生成以下代码:错误CS1503参数2:无法从“System.Action”转换为“Windows.UI.Core.DispatchedHandler” public static async Task DispatchToUI(Action action, CoreDispatcherPriority priority = Core

G'day的朋友们

我觉得我看不到一些基本的东西

定义为公共委托无效操作()

定义为公共委托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”

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

因此,一个版本的public delegate void()无法转换为另一个版本的public delegate void()?

您无法转换这样的委托,请勾选So问题

但是,您可以从现有代理创建新代理:

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

您不能像这样转换委托,请勾选SO问题

但是,您可以从现有代理创建新代理:

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

或者,您也可以使用lambda函数隐式地为您转换它:``公共静态异步任务DispatchToUI(Action Action,CoreDispatcherPriority=CoreDispatcherPriority.Normal){if(CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess){Action();}else{wait CoreApplication.MainView.corewindown.Dispatcher.RunAsync(priority,()=>action();}}```谢谢!我知道这是很基本的!或者,您也可以使用lambda函数隐式地为您转换它:``公共静态异步任务DispatchToUI(Action Action,CoreDispatcherPriority=CoreDispatcherPriority.Normal){if(CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess){Action();}else{wait CoreApplication.MainView.corewindown.Dispatcher.RunAsync(priority,()=>action();}}```谢谢!我知道这是很基本的!