C#线程和后台工作者问题

时间:2011-08-18 10:13:12

标签: c# multithreading

在我的主线程中,我运行了Backgroundworker。他的todo工作是从主线程调用“方法”的方法。当我想取消我的后台工作时它会停止运行但是在mainthread上调用的“方法”仍会运行导致问题的原因。知道怎么解决吗?

2 个答案:

答案 0 :(得分:1)

除了检查CancellationPending之外,还需要在Cancel参数上设置DoWorkEventArgs属性。

然后,在RunWorkerCompleted事件中,您可以查询RunWorkerCompletedEventArgs的{​​{1}}属性,该属性将反映您在Cancelled中设置的值。

现在您可能会问为什么只要外部取消操作,DoWorkEventArgs就不会自行设置这些属性。原因是它不知道您的DoWorkEventArgs是否实际检查它是否被取消。 BackgroundWorker本可以错过并成功完成。这很重要,因为它可能会导致副作用(如数据库更新),您可能需要知道它是否实际完成。

答案 1 :(得分:0)

MSDN请注意,您必须在Method内检查CancellationPending(你这样做吗?)

相关问题