如何使 Backgroundworker 中的进程在 Cancellation Pending 事件中退出

Posted

技术标签:

【中文标题】如何使 Backgroundworker 中的进程在 Cancellation Pending 事件中退出【英文标题】:How to make Process within Background worker to exit on CancellationPending event 【发布时间】:2020-01-19 00:31:10 【问题描述】:

我有一个由 UI 和后台工作人员组成的应用程序。

后台工作人员执行以下任务:

    创建进程并调用外部二进制文件 - 使用 System.Diagnostic.Process。 等待此进程退出。 使用数据更新 UI。

这里的问题是外部 exe 是否挂起。他们没有办法取消我的后台进程。 由于我的后台工作人员正忙于等待其他进程完成,因此无法使用取消令牌。为了解决这个问题,我对我的进程使用了​​超时。此应用程序关闭后。

我的问题是有什么方法可以取消进程(由后台工作人员调用)以停止设置取消事件。

提前感谢您的时间和帮助。

【问题讨论】:

您可以随时Kill进程。 不使用取消令牌的原因是什么? @stefan 是的,但是我需要通过应用程序处理它,并且只有在进程挂起时才终止 @DIlshodK ,取消令牌不起作用,因为后台工作人员忙于等待进程退出。 如果为 WaitToExit 设置超时是一个不错的选择,或者我们还有其他更好的选择,我需要一个建议。所以我们不必担心决定超时的最大限制 【参考方案1】:

我认为你可以使用 https://github.com/jamesmanning/RunProcessAsTask 来实现这个逻辑。有了这个库,你可以

    使用超时指定取消令牌 等待进程作为一个顺序任务而不阻塞线程。

【讨论】:

非常感谢这个建议,这将帮助我至少解除对我的工人的阻止

以上是关于如何使 Backgroundworker 中的进程在 Cancellation Pending 事件中退出的主要内容,如果未能解决你的问题,请参考以下文章

如何正确实现带有 ProgressBar 更新的 BackgroundWorker?

BackgroundWorker UI不会更新Windows Phone 7中的进度

异步/等待与 BackgroundWorker

异步/等待与 BackgroundWorker

如何将 BackgroundWorker 的结果设置为 TextView

从后台进程打开窗口并在 WPF 中从用户那里获取输入