C# 正在终止来自不同类的后台工作程序
问题是:如何中途终止流程?我必须创建一个取消按钮来停止当前的处理 我想用下面这句话C# 正在终止来自不同类的后台工作程序,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,问题是:如何中途终止流程?我必须创建一个取消按钮来停止当前的处理 我想用下面这句话 if ((worker.CancellationPending == true)) { e.Cancel = true; } …并将AllocateTrades2方法封装在内部,但这意味着我必须从其他地方调用Cancel标志,并且只有在该方法完成处理后,它才会检查它 我不能只是“假装”它没有做任何事情,因为如
if ((worker.CancellationPending == true))
{
e.Cancel = true;
}
…并将AllocateTrades2方法封装在内部,但这意味着我必须从其他地方调用Cancel标志,并且只有在该方法完成处理后,它才会检查它
我不能只是“假装”它没有做任何事情,因为如果用户再次单击同一个操作,将抛出一个异常,说明该工作程序正在使用
我想做的一个例子:
public void bw_DoWork(object sender, DoWorkEventArgs e)
{
AllocateTrades2();
}
public void AllocateTrades()
{
Method1();
CheckTerminate();
Method2();
CheckTerminate();
//Click the cancel button in the UI during method 3 processing
Method3();
CheckTerminate();
}
CheckTerminate()停止所有处理,并使其自身可用于将来的调用。我想做的是可能的吗?答案是是 无论您在哪里检查“CancellationPending”,您都可以停止您的工作人员 在您的示例中,您有以下选项:
- 签入'AllocateTrades2()'-函数本身
If (bw.CancellationPending) { e.Cancel = True return; }
- 在运行下一个流程之前,从外部进行检查
If (!worker.CancellationPending) { MethodX(); }
通常,只要有意义,您应该检查CancellationPending(例如,在循环中:在处理项目之后或之前) 答案是肯定的 无论您在哪里检查“CancellationPending”,您都可以停止您的工作人员 在您的示例中,您有以下选项:
- 签入'AllocateTrades2()'-函数本身
If (bw.CancellationPending) { e.Cancel = True return; }
- 在运行下一个流程之前,从外部进行检查
If (!worker.CancellationPending) { MethodX(); }
通常,只要有意义,您应该检查CancellationPending(例如,在循环中:在处理项目之后或之前) 你必须做一些像
public void AllocateTrades()
{
if (!worker.CancellationPending)
{
Method1();
}
if (!worker.CancellationPending)
{
Method2();
}
if (!worker.CancellationPending)
{
Method3();
}
}
.Net无法为您决定什么是与您的后台工作相关的“原子”操作,因此您必须决定检查挂起的取消的频率和位置。您必须执行以下操作:
public void AllocateTrades()
{
if (!worker.CancellationPending)
{
Method1();
}
if (!worker.CancellationPending)
{
Method2();
}
if (!worker.CancellationPending)
{
Method3();
}
}
.Net无法为您决定什么是与您的后台工作相关的“原子”操作,因此您必须决定检查挂起的取消的频率和位置。这可能是一种过度操作(取决于项目的大小和检查位置的数量)但这看起来像样板和重复代码,我会创建一个方面,并在其中移动对挂起取消的检查。没有完全相同的结构,但检查每个方法的想法是相同的+1并被接受。这可能有点过分(取决于项目的规模和检查的地方的数量),但这看起来像样板和重复代码,我会创建一个方面,并在其中移动待取消的检查。没有完全相同的结构,但检查每个方法的想法是相同的+1并接受。