基础C#EventHandler定义为:
namespace System
{
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
}
Run Code Online (Sandbox Code Playgroud)
有没有人,如果有一个等待的事件处理程序可用?例如
public delegate Task EventHandlerAsnyc<TEventArgs>(object sender, TEventArgs e);
Run Code Online (Sandbox Code Playgroud)
谢谢
如果您希望处理事件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;
}
}
Run Code Online (Sandbox Code Playgroud)
这种方式SomeAsyncOrLongRunningOnAnotherThreadTask()不会阻止您的UI线程.并且在该任务完成后恢复处理程序.
旁注:通常async方法应始终返回一个Task或Task<T>可由await调用者编辑或以其他方式处理的方法.上面的用例是(afaik)唯一合理的情况,void应该用于async方法.
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |