c# - 异步操作的非合作取消

标签 c# multithreading asynchronous

在我的 Windows 窗体应用程序中,我需要调用第 3 方数学库 (Accord.NET) 的长期运行操作。在计算过程中,我希望保持 GUI 响应,同时让用户可以取消长时间运行的操作。

有没有办法在后台线程中执行该函数并让用户可以取消它?请注意,我要调用的长时间运行的函数位于外部库中,并且不接受 CancellationToken(否则我可以轻松使用 ThreadPool QueueUserWorkItem,例如)。所以我正在寻找一种非合作取消操作的方法。

最佳答案

我会说你有三个选择。

第一,将计算旋转到它自己的线程中。这将使 UI 保持响应。不使用取消按钮,而是让用户知道他们将要执行的操作一旦被注视就无法停止。

第二,像上面一样将计算旋转到它自己的线程中;然而,假装通过简单地降低线程优先级来取消它。您可以让计算继续进行,但只需停止在主线程中报告进度即可。完成后,只需丢弃结果即可。

三,将计算放入它自己的应用程序域/进程中。如果需要,终止该外部进程。


每个人都有好事和坏事。

关于c# - 异步操作的非合作取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667526/

相关文章:

android - 这是停止处理程序线程的完美方法吗?

multithreading - 为什么我不能像这样动态创建线程向量

.net - 为什么计时器线程上未处理的异常不会使进程崩溃

java - Java 中的异步函数调用

c# - 检索 BLOB 文件

c# - 发布数据时维护 ViewBag 值

c# - 使用 ReadOnlySpan<char> 处理转义序列

java - 在 Spring MVC 请求处理程序中调用 Thread.currentThread().sleep(2000) 的第二个请求有什么影响?

javascript - 每个数组元素的异步调用并等待完成

c# - 在线程之间传递 List<Polyline>