C# 当messagebox退出时,如何停止backgroundworker?
我正在用C#设计一个表单。我使用backgroundworker以我设计的形式执行我的操作。在事务结束时输出messagebox.show();我必须进入下一步。但是backgorundworker继续工作,尽管有消息框。Backgroundworker可能需要填写RunWorkerCompleted方法。但正如消息框所看到的,我不知道如何阻止它工作。 你能帮助我吗?我想,C# 当messagebox退出时,如何停止backgroundworker?,c#,backgroundworker,messagebox,C#,Backgroundworker,Messagebox,我正在用C#设计一个表单。我使用backgroundworker以我设计的形式执行我的操作。在事务结束时输出messagebox.show();我必须进入下一步。但是backgorundworker继续工作,尽管有消息框。Backgroundworker可能需要填写RunWorkerCompleted方法。但正如消息框所看到的,我不知道如何阻止它工作。 你能帮助我吗?我想, if(MessageBox.Show("convert is okey") { ....//but ı dont
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当前正忙,无法同时运行多个任务。”问题是这样的!我再次回答