2012-03-21 92 views
0

我的窗體上有幾個複選框。禁用CheckBox在啓用後對鼠標點擊作出反應

按下按鈕我正在後端做一些操作(約3秒鐘)。

直到那時我禁用複選框以防止用戶交互。

但是,如果我對殘疾人的複選框點擊,它它就會啓用

如何防止這種情況後反應?

+0

你怎麼做你的後臺操作?您是否使用BackgroundWorker線程? – 2012-03-21 05:08:24

+0

不,它在單線程上 – Gaddigesh 2012-03-21 05:11:25

+1

[Button disable and enable]的可能重複(http://stackoverflow.com/questions/8975569/button-disable-and-enable) – 2012-03-21 05:19:18

回答

2

我敢打賭,發生的事情是,當您運行資源密集型流程時,您的用戶界面會被凍結。點擊鼠標就會排隊等候,直到程序運行完成後纔會處理。此時,複選框已被重新啓用。

我會建議使用BackgroundWorker線程來處理你沉重的3秒的操作。這將使您的UI免費處理像鼠標點擊這樣的事情,並且應該解決您的問題。

+0

這正是發生的情況!感謝您的回覆,我認爲BackgroundWorker在這麼短的時間內不是必需的,請讓我試試看 – Gaddigesh 2012-03-21 05:24:47

0

您可以使用BackgroundWorker的防止UI凍結

BackgroundWorker bw = new BackgroundWorker(); 


bw.WorkerSupportsCancellation = true; 
bw.WorkerReportsProgress = true; 


private void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker; 

    for (int i = 1; (i <= 10); i++) 
    { 
     if ((worker.CancellationPending == true)) 
     { 
      e.Cancel = true; 
      break; 
     } 
     else 
     { 
      // Perform a time consuming operation and report progress. 
      System.Threading.Thread.Sleep(500); 
      worker.ReportProgress((i * 10)); 
     } 
    } 
} 


private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    this.tbProgress.Text = (e.ProgressPercentage.ToString() + "%"); 
} 


private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if ((e.Cancelled == true)) 
    { 
     this.tbProgress.Text = "Canceled!"; 
    } 

    else if (!(e.Error == null)) 
    { 
     this.tbProgress.Text = ("Error: " + e.Error.Message); 
    } 

    else 
    { 
     this.tbProgress.Text = "Done!"; 
    } 
}