gpt4 book ai didi

c# - 以 Task 作为返回值的 EventHandler

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:50 25 4
gpt4 key购买 nike

基本 C# EventHandler 定义为:

namespace System
{
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
}

如果有可用的可等待事件处理程序,有人知道吗?例如

public delegate Task EventHandlerAsnyc<TEventArgs>(object sender, TEventArgs e);

谢谢

最佳答案

如果您希望处理您的事件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方法应始终返回 TaskTask<T>那可以是await由调用者编辑或以其他方式处理。上面的用例是(afaik)唯一合理的情况 void应该用于 async方法。

关于c# - 以 Task 作为返回值的 EventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45613968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com