在我的 Windows 窗体应用程序中,我需要调用第 3 方数学库 (Accord.NET) 的长期运行操作。在计算过程中,我希望保持 GUI 响应,同时让用户可以取消长时间运行的操作。
有没有办法在后台线程中执行该函数并让用户可以取消它?请注意,我要调用的长时间运行的函数位于外部库中,并且不接受 CancellationToken
(否则我可以轻松使用 ThreadPool
的 QueueUserWorkItem
,例如)。所以我正在寻找一种非合作取消操作的方法。
最佳答案
我会说你有三个选择。
第一,将计算旋转到它自己的线程中。这将使 UI 保持响应。不使用取消按钮,而是让用户知道他们将要执行的操作一旦被注视就无法停止。
第二,像上面一样将计算旋转到它自己的线程中;然而,假装通过简单地降低线程优先级来取消它。您可以让计算继续进行,但只需停止在主线程中报告进度即可。完成后,只需丢弃结果即可。
三,将计算放入它自己的应用程序域/进程中。如果需要,终止该外部进程。
每个人都有好事和坏事。
关于c# - 异步操作的非合作取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9667526/