我有活动
button.Click += ProcessClick;
我的事件处理程序ProcessClick
是:
private void async ProcessClick(object o, EventArgs e){
await LongOperation()
}
当我快速点击按钮多次时, 如何只处理第一个线程并跳过其他线程,直到第一个线程完成?
首次点击后禁用按钮不是解决方案......
编辑:可以使用任何类型的线程构造:任务,信号量,锁等。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
private bool longOperationRunning;
private void async ProcessClick(object o, EventArgs e){
if (longOperationRunning)
return;
longOperationRunning = true;
await LongOperation()
longOperationRunning = false;
}