c# - 如何停止其`DoWork`处理程序只包含一个(长期运行)语句的BackgroundWorker?

c# - 如何停止其`DoWork`处理程序只包含一个(长期运行)语句的BackgroundWorker?,第1张

我遇到BackgroundWorker DoWork处理程序只包含一个语句的问题。这意味着我无法检查CancellationPending标志:

private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    CallTimeConsumerFunction();
}

如何停止此BackgroundWorker?有没有解决办法?

最佳答案:

1 个答案:

答案 0 :(得分:4)

查看.NET 4的任务并行库(TPL),它位于BackgroundWorker之后且设计得很好,可以让您了解如何处理这个问题。

Cancellation in the TPL is built on the idea of cooperative cancellation。这意味着任务不会被强制从外部停止;相反,他们通过定期检查是否已经请求取消参与取消过程,如果是,则通过从内部优雅地中止"#34;

我建议您遵循TPL的示例并实施合作取消。与this comment状态一样,将取消逻辑注入CallTimeConsumerFunction。例如:

void CallTimeConsumerFunction(Func<bool> shouldCancel)
{                          // ^^^^^^^^^^^^^^^^^^^^^^^
                           // add this; can be called to find out whether to abort or not
    … // possibly lengthy operation
    if (shouldCancel()) return;
    … // possibly lengthy operation
}

private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    CallTimeConsumerFunction(shouldCancel: () => backgroundWorker.CancellationPending);
}                         // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复