.net 后台工作者忙碌错误,我想在进度条中实现

ecfsfe2w  于 2023-01-31  发布在  .NET
关注(0)|答案(1)|浏览(99)
private void button1_Click(object sender, EventArgs e)
{
    //progress bar
    backgroundWorker1.RunWorkerAsync();
    progressBar1.Value = 1;
    progressBar1.Minimum = 1;
    progressBar1.Maximum = 10;
    label3.Text = "backgroundworker Task completed";

    Thread.Sleep(100);
    Application.DoEvents();
    // end of bgw
}

我在Backgroundworker1.RunworkerAsync()上得到错误,它显示Backgroundworker的错误是忙碌的,并尝试以后使用它。是否有任何其他方法来解决。我提前感谢。

but5z9lq

but5z9lq1#

调用RunWorkerAsync时,IsBusy属性将返回TrueBackgroundWorker将引发其DoWork事件,您将在该事件处理程序中执行后台工作。一旦该事件处理程序完成,它将引发其RunWorkerCompleted事件,您可以选择处理该事件以在后台工作后更新UI。两个事件的事件处理程序完成后,IsBusy属性将返回False,该属性的全部意义在于告诉您BackgroundWorker已经忙碌了,因此您不应该调用RunWorkerAsync。问题的解决方案是在IsBusy再次变为False之前不要调用RunWorkerAsync,例如

private void button1_Click(object sender, EventArgs e)
{
    if (backgroundWorker1.IsBusy)
    {
        return;
    }

    // Setup ProgressBar and whatever else here first.

    backgroundWorker1.RunWorkerAsync();
}

相关问题