我试图找出处理单选按钮点击触发的后台工作人员的最佳方法。我创建了一个非常简单的表单,其中包含 3 个单选按钮和一个标签。每个单选按钮共享相同的事件 radioButton_CheckedChanged。如果事件完成,那么我将标签更新为“完成”。如果您在事件完成之前单击另一个单选按钮,则将标签更新为已取消。下面是我在这个快速示例中编写的代码。尽管应用程序往往按预期运行,但我担心的是 Application.DoEvents 的使用。我有什么替代方案。由于明显的原因,我在 IsBusy 时无法入睡。我是不是把这一切都错了,还是有更好的方法来做到这一点?谢谢,波科
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb.Checked)
{
if (backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
while (backgroundWorker1.IsBusy)
Application.DoEvents();
}
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 0; i < 100 && !worker.CancellationPending; ++i)
Thread.Sleep(1);
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
label1.Text = "Canceled";
else
label1.Text = "Complete";
}