C#BackgroundWorker - 如何取消worker.CancellationPending状态?

时间:2016-09-21 20:36:14

标签: c# backgroundworker

我有一个调用第三方远程服务器的应用程序。我使用BackgroundWorker运行Async。

如果我调用CancelAsync()取消远程进程,然后使用worker.CancellationPending状态触发对此远程服务器上的Close()方法的调用,则远程服务器会弹出一条消息"你正试图关闭这个过程,这就是你想要的吗?"和是/否按钮。

如果用户按是,则没问题,远程服务器关闭。但是如果用户按下No,那么如何取消CancellationPending状态以便我的进程可以继续,直到用户再次调用CancelAsynch()为止?

编辑:在下面的第一个答案之后:我如何处理这样一个事实:用户可以选择不关闭远程服务器并让我的应用程序处于无法更改的取消状态时保持运行状态?

编辑:在键盘战士将其标记为重复之前,请阅读该死的问题。

2 个答案:

答案 0 :(得分:0)

如果已请求取消,则取消等待设置为true,并且不会再设置为false。这将导致不可预测的行为:如果取消已被观察,如果没有,该怎么办?在一种情况下,操作将被取消,而另一种情况则不会。

答案 1 :(得分:0)

作为一般规则,您不应在BackgroundWorker逻辑中进行用户交互。 (出于某种原因,它被称为 BackgroundWorker 。)

请记住,CancelAsync()是异步的,因此如果您在计算过程中要求进行用户交互,那么当用户执行完全不同的操作时,MessageBox可能会在几秒钟/几分钟后弹出。

如果你正确地隔离了线程,你不应该遇到这种问题。

在拨打CancelAsync()之前,您应该要求用户确认吗?

用户要求取消 - >你要求确认 - >调用CancelAsync()