假設您在文本框中的表單上有一個計數爲1000的按鈕,然後清除它。是否有可能避免Winform上的多個按鈕點擊?
如果我快速點擊按鈕五次(在運行時),Click事件處理程序將被調用5次,我會看到計數1000 1000次。
當第一次點擊正在計數時,是否可以禁用該按鈕上的其他點擊?
注意:禁用單擊處理程序的第一個語句中的按鈕,然後在最後重新啓用不起作用。此外,取消訂閱/訂閱點擊事件( - =後跟+ =)不起作用。
這裏的樣本來說明:
private bool runningExclusiveProcess = false;
private void button1_Click(object sender, EventArgs e)
{
this.button1.Click -= new System.EventHandler(this.button1_Click);
if (!runningExclusiveProcess)
{
runningExclusiveProcess = true;
button1.Enabled = false;
textBox1.Clear();
for (int i = 0; i < 1000; i++)
{
textBox1.AppendText(i + Environment.NewLine);
}
runningExclusiveProcess = false;
button1.Enabled = true;
}
this.button1.Click += new System.EventHandler(this.button1_Click);
}
你正在做UI線程上的所有工作。在允許您再次單擊該按鈕之前,它總是會到達該方法的末尾。代碼運行所需的時間可能比您想象的少很多。 – xyz 2009-08-06 10:14:09
計數到1000不是它曾經的延遲。您的電腦點擊次數達到1000次。 (幾個Sleep()或其他更長時間的運行函數調用會顯示您期望的行爲) – 2009-08-06 10:18:40
@tzup即使UI線程被阻塞,您仍然在等待排隊的點擊。我不知道。將刪除我的答案:) – xyz 2009-08-06 10:34:33