.net线程安全点击按钮很多

roc*_*ker 1 .net c#

我有活动

button.Click += ProcessClick;
Run Code Online (Sandbox Code Playgroud)

我的事件处理程序ProcessClick是:

private void async ProcessClick(object o, EventArgs e){
    await LongOperation()
}
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:利用任何类型的线程结构是可以接受的:任务,信号量,锁等.

Bru*_*sta 6

您可以在第一次单击后删除该事件,并在处理第一次单击结束时再次添加该事件.


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;
}
Run Code Online (Sandbox Code Playgroud)