我有一个按钮单击事件处理程序,其中有一个开关盒,用于控制一个事件处理程序中的多个按钮。
我需要使用队列,因为当单击一个按钮并进行一些处理时,第二个按钮单击不会干扰第一个按钮单击,而是添加到队列中。我不想使用.enabled=false;
,因为它会完全放弃第二次点击,而且我目前正在编辑某人的工作软件,所以我不想破坏我不知道的东西,所以你有什么建议?
我确实用System.Collections.Queue成功了
代码是:
private Queue<Button> Button_Queue = new Queue<Button>();
private bool isProcessing = false;
private void Button_Click((object sender, EventArgs e){
if(isProcessing){
Button_Queue.Enqueue(this);
}
else
{
isProcessing = true;
// code here
isProcessing = false;
while(Button_Queue.Count > 0){
Button_Queue.Dequeue().PerformClick();
}
}
当然我的与此略有不同,因为我需要传递一些变量并且为此修改了我的点击方法。
肮脏但简单的解决方案。
public partial class DataRefresh : Form //DataRefresh is just "some form"
{
...
...
public DateTime ClickTime; //Time when click is processed by system
public DateTime LastExecutionRunTime = DateTime.MinValue; //Time when the all the click code finish
private void buttonDataRefresh_Click(object sender, EventArgs e)
{
ClickTime = DateTime.Now;
if (ClickTime.Subtract(LastExecutionRunTime).TotalSeconds < 5 )
{
//It will keep returning - hopefully until all events in que are satisfied
return;
}
//Long running code
//Importing whole table from remote DB
...
...
//End of the Long running code
LastExecutionRunTime = DateTime.Now;
}
}