禁用复选框在启用后对鼠标单击作出反应
本文关键字:单击 鼠标 复选框 启用 | 更新日期: 2023-09-27 18:28:41
我的表单上有几个复选框。
按下一个按钮,我正在后台做一些操作(大约3秒)。
在此之前,我会禁用复选框以防止用户交互。
但如果我点击禁用复选框,它会在启用后做出反应
如何防止这种情况发生?
我敢打赌,在运行资源密集型流程时,UI被冻结了。鼠标单击会进入队列,直到进程运行完毕后才会进行处理。此时,复选框已经重新启用。
我建议使用BackgroundWorker线程来处理您繁重的3秒操作。这将使你的用户界面可以自由处理鼠标点击之类的事情,并且应该可以解决你的问题。
您可以使用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!";
}
}