禁用复选框在启用后对鼠标单击作出反应

本文关键字:单击 鼠标 复选框 启用 | 更新日期: 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!";
    }
}