C# 为什么可以';我不能从Action转换为DispatchedHandler吗?
G'day的朋友们 我觉得我看不到一些基本的东西 定义为公共委托无效操作() 定义为公共委托void DispatchedHandler() 但是在RunASync行生成以下代码:错误CS1503参数2:无法从“System.Action”转换为“Windows.UI.Core.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
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();}}```谢谢!我知道这是很基本的!