基础C#EventHandler
定义为:
namespace System
{
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
}
是否有人可以使用等待的事件处理程序? E.g。
public delegate Task EventHandlerAsnyc<TEventArgs>(object sender, TEventArgs e);
THX
答案 0 :(得分:5)
如果您希望处理事件async
(意味着您可以使用await
提前返回并稍后恢复),您只需将处理程序声明为async void
:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponents();
myButton.Click += myButton_Click;
}
public async void myButton_Click(object sender, EventArgs e)
{
myButton.Enabled = false;
await SomeAsyncOrLongRunningOnAnotherThreadTask();
myButton.Enabled = true;
}
}
这种方式SomeAsyncOrLongRunningOnAnotherThreadTask()
不会阻止您的UI线程。并且在该任务完成后恢复处理程序。
附注:通常async
种方法应始终返回Task
或Task<T>
,await
或void
可由async
或由来电者处理。上面的用例是(afaik)唯一合理的情况,Criteria1
方法应该使用Criterial
。