c# - .net 线程安全的多次点击按钮

标签 c# .net

我有事件

button.Click += ProcessClick;

我的事件处理程序 ProcessClick 是:

private void async ProcessClick(object o, EventArgs e){
    await LongOperation()
}

当我多次快速点击按钮时, 如何只处理第一个线程并跳过其他线程,直到第一个线程完成?

第一次点击后禁用按钮不是解决方案...

编辑:使用任何类型的线程结构都是可以接受的:任务、信号量、锁等等。

最佳答案

您可以在第一次点击后删除事件,并在处理完第一次点击后再次添加。


private async void button1_Click(object sender, EventArgs e)
{
    Debug.Write("Running click event");
    this.button1.Click -= button1_Click;

    await Task.Run(() => Task.Delay(5000));

    this.button1.Click += button1_Click;
}

关于c# - .net 线程安全的多次点击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28739165/

相关文章:

c# - 在代码中设置边距属性

c# - ExcelDataReader for C# 是否需要在目标计算机上安装 Excel?

c# - 查找大文本部分

c# - 从字节数组打开 .exe 文件

.net - 使用 CompareValidator 进行时间验证

c# - 从 native C++ 调用 C#,没有/clr 或 COM?

c# - 如何使用Simple Injector实现此混合对象生命周期

c# - 在 C# 中通过查询字符串传递电子邮件地址

具有多个返回 string 和 int 的 C# 类

.net - 附加到 .NET 程序集的 Windows EXE 应用程序 list 是否应具有正确的应用程序名称和版本集?