终止.net 4中的后台工作人员



statusbar.cs

在加载StatusBar表单时,我调用backgroundWorker1。在backgroundWorker1.DoWork中,我调用Login(Username, Password);函数,该函数也在同一个statusbar.cs文件中。

private void StatusBar_Load(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerCompleted += (o, args) =>
            {
                Close();
            };
            backgroundWorker1.DoWork +=
                (o, args) =>
                {
                    Login(Username, Password);
                };
            backgroundWorker1.RunWorkerAsync();
        }
Login(Username, Password)
{
  if(Authenticated)
  {   
     MessageBox.Show("Success");
     //do some process
  }
  else
  {
     MessageBox.Show("Failed...");
     return;
  }
}

我的问题是进度条加载正确。它一直显示,直到我关闭Messagebox。一旦单击messagebox中的OK按钮,进度条就会消失。一旦messagebox加载/显示,我需要隐藏进度条。我尝试将backgroundWorker1.CancelAsync();放在messagebox之前,但对我不起作用。

消息框出现后,我需要关闭进度栏。是否可以强制终止backgroundworker1

问题是后台工作程序的CancelAsync方法,只需在另一个线程中工作的进程中设置一个变量。这样的过程必须检查该变量,并在该变量设置为false时停止操作。此变量位于DoWorkEventArgs中,并命名为Cancel

如果您无法控制要停止的操作的流程,那么我建议使用经典的Thread类。Thread.Abort方法引发一个ThreadAbortException并强制线程。停止。

最新更新