我的窗體上有幾個複選框。禁用CheckBox在啓用後對鼠標點擊作出反應
按下按鈕我正在後端做一些操作(約3秒鐘)。
直到那時我禁用複選框以防止用戶交互。
但是,如果我對殘疾人的複選框點擊,它它就會啓用
如何防止這種情況後反應?
我的窗體上有幾個複選框。禁用CheckBox在啓用後對鼠標點擊作出反應
按下按鈕我正在後端做一些操作(約3秒鐘)。
直到那時我禁用複選框以防止用戶交互。
但是,如果我對殘疾人的複選框點擊,它它就會啓用
如何防止這種情況後反應?
我敢打賭,發生的事情是,當您運行資源密集型流程時,您的用戶界面會被凍結。點擊鼠標就會排隊等候,直到程序運行完成後纔會處理。此時,複選框已被重新啓用。
我會建議使用BackgroundWorker線程來處理你沉重的3秒的操作。這將使您的UI免費處理像鼠標點擊這樣的事情,並且應該解決您的問題。
這正是發生的情況!感謝您的回覆,我認爲BackgroundWorker在這麼短的時間內不是必需的,請讓我試試看 – Gaddigesh 2012-03-21 05:24:47
您可以使用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!";
}
}
你怎麼做你的後臺操作?您是否使用BackgroundWorker線程? – 2012-03-21 05:08:24
不,它在單線程上 – Gaddigesh 2012-03-21 05:11:25
[Button disable and enable]的可能重複(http://stackoverflow.com/questions/8975569/button-disable-and-enable) – 2012-03-21 05:19:18