C# 当messagebox退出时,如何停止backgroundworker?

C# 当messagebox退出时,如何停止backgroundworker?,c#,backgroundworker,messagebox,C#,Backgroundworker,Messagebox,我正在用C#设计一个表单。我使用backgroundworker以我设计的形式执行我的操作。在事务结束时输出messagebox.show();我必须进入下一步。但是backgorundworker继续工作,尽管有消息框。Backgroundworker可能需要填写RunWorkerCompleted方法。但正如消息框所看到的,我不知道如何阻止它工作。 你能帮助我吗?我想, if(MessageBox.Show("convert is okey") { ....//but ı dont

我正在用C#设计一个表单。我使用backgroundworker以我设计的形式执行我的操作。在事务结束时输出messagebox.show();我必须进入下一步。但是backgorundworker继续工作,尽管有消息框。Backgroundworker可能需要填写RunWorkerCompleted方法。但正如消息框所看到的,我不知道如何阻止它工作。 你能帮助我吗?我想,

if(MessageBox.Show("convert is okey")
{
    ....//but ı dont know what am ı writing here, too?
}
背景工作人员是:

private void Button7_Click(object sender, EventArgs e) 
{ 
   backgroundWorker1.RunWorkerAsync();      
   backgroundWorker1.WorkerReportsProgress = true; 
}

private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 0; i <= 100; i++) 
    { 
        Convert(); backgroundWorker1.ReportProgress(i); 
    } 
    // Bitrate(); 
} // is do work

private void BackgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    progressBar1.Value = e.ProgressPercentage; 
}

private void BackgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    progressBar1.Value = 0; 
}
private void按钮7\u单击(对象发送者,事件参数e)
{ 
backgroundWorker1.RunWorkerAsync();
backgroundWorker1.WorkerReportsProgress=true;
}

私有void BackgroundWorker1\u DoWork(对象发送方,DoWorkEventArgs e) {
对于(inti=0;i保留一个可以被后台工作程序和UI代码访问的变量。简单地说,让我们将其保留为公共静态变量

public class YourClass
{
   public static bool IsBackgroundProcessActive = true;
}
if(MessageBox.Show("convert is okey")
{
    yourClass.IsBackgroundProcessActive  = false;
}
现在,当您使用消息框时,请更改该变量

public class YourClass
{
   public static bool IsBackgroundProcessActive = true;
}
if(MessageBox.Show("convert is okey")
{
    yourClass.IsBackgroundProcessActive  = false;
}
现在,您需要让后台工作程序侦听此变量。 对于大多数常见情况,此后台工作程序将是一个带有简单流程的循环。因此,您可以设置循环条件来检查此变量

private void YourBackgroundWorkerFunction()
{
    while(yourClass.IsBackgroundProcessActive)
    {
       // Your simple iterative task 
    }
}
对于后台工作线程不是简单循环的复杂情况,可以使用异常停止线程

private void MarkAsSafeToStop()
{
    if(!yourClass.IsBackgroundProcessActive)
    {
        throw new OperationCancelledException();
    }
}
然后在后台工作程序功能的多个位置使用此功能。然后,每当您在单击消息框后到达此功能时,后台工作程序将停止,并出现异常


您可以使用内置的后台工作程序取消机制


可能您需要为我们提供更多的代码来理解问题。好的,我正在执行一个转换器操作。我使用backgroundworker是因为我在过程中在进度栏中使用了它。当过程完成时,我会收到一个错误,就像backgroundworker现在正在工作一样,因为我想在表单。我知道过程结束了。Viddeo caonverter;我可以在文件中观察到,我可以发出警告,它以消息框结束。但是当我的转换完成后,backgroundworker应该停止运行,直到下一个被触发。@Steven描述得很好,但很明显有些事情不像你想的那样。代码?backgroundworker是“private void”按钮7_单击(对象发送方,事件参数e){backgroundWorker1.RunWorkerAsync();backgroundWorker1.WorkerReportsProgress=true;}的私有无效backgroundWorker1_DoWork(对象发送方,DoWorkerVentargs e){for(int i=0;我是的,但我有这样的错误;不能隐式地将类型'Ssytem.Windows.Forms.DialogResult'转换为bool。如果像这样习惯于if(messagebox(“convert is okey”),那么我的错误就在于类型转换。只需使用if(messagebox.Show(“convert is okey”)==DialogResult.OK){}一切都会好起来的。System.InvalidOperationException:“此BackgroundWorker当前正忙,无法同时运行多个任务。”问题是这样的!我再次回答