我正在用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;
}
保留一个可同时由后台工作人员和UI代码访问的变量。简单起见,请将其保留为公共静态变量。
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();
}
}
然后在后台工作程序功能的多个位置使用此功能。然后,只要在单击消息框后达到此功能,后台工作程序就会异常停止。
ie
private void YourBackgroundWorkerFunction()
{
// Some code
MarkAsSafeToStop();
// Some other code
MarkAsSafeToStop();
// and so on.
}
您可以使用后台工作程序内置的内置取消机制。
https://www.wpf-tutorial.com/misc/cancelling-the-backgroundworker/