WPF/C# 中的异步任务和路由事件处理程序出现问题



我有一个带有按钮的用户控件,该控件从带有RoutedEventHandler的窗口中使用:

用户控件:

public event RoutedEventHandler IniciarPLC_Click;
private void BtnIniciarPLC_Click(object sender, RoutedEventArgs e)
{
.....
if (IniciarPLC_Click != null)
{
IniciarPLC_Click(this, new RoutedEventArgs());
}
......
}

窗:

XAML:

<ucUserControl x:Name="cntBarraHerramientas"  IniciarPLC_Click="CntBarraHerramientas_IniciarPLC_Click"/>

C#:

private void CntBarraHerramientas_IniciarPLC_Click(object sender, RoutedEventArgs e)
{
....       
}

但是我需要在CntBarraHerramientas_IniciarPLC_Click中调用一个async方法,所以我通过async Task更改了void返回类型,并使用await调用该方法:

private async Task CntBarraHerramientas_IniciarPLC_Click(object sender, RoutedEventArgs e)
{
await AsyncMethod(...);
}

我有这个错误:

无法从文本"CntBarraHerramientas_IniciarPLC_Click"创建"IniciarPLC_Click"。' ArgumentException:不能链接到目标方法,因为其安全性透明度或签名与委托类型的安全性或签名不兼容。

问题是我如何使用RoutedEventHandler调用async方法?因为从按钮单击事件调用的async方法有效。

>事件处理程序应async void。这是为数不多的几个你会async void而不是async Task的地方之一

最新更新