【发布时间】:2019-11-20 11:46:55
【问题描述】:
我使用 WPF 创建一个窗口,同时创建一个新任务来实现时间成本作业,这也会在完成之前阻止任务。
现在我想使用一个可以取消和退出被阻止任务的按钮,尽管它仍然处于活动状态。微软文档推荐使用CancellationToken取消任务,但问题是我无法检查IsCancellationRequested标志是否被触发,因为被阻止的任务没有循环检测标志,无法正常退出任务。我也尝试使用Thread.Abort() 强制关闭线程,但它会导致PlatformNotSupportedException。
所以我想知道是否有任何方法可以取消阻塞的任务/线程及其子任务/线程,或者 WPF 是否提供任何方法来关闭除主 UI 线程之外的所有任务/线程。
【问题讨论】:
-
你不能取消一个不支持被取消的操作,但是你可以忽略它产生的任何返回值,然后在你的另一个线程中继续。
-
Task.Run(() => YourLongRunningFunction).Wait(2000);在函数内部创建一个条件来检查 False 或 true 的属性以取消任务
-
你有一个新任务。这会进行一些长时间的操作。它还阻止了其他一些任务。我不清楚后一个任务是什么。你需要你的长任务来阻止你所说的其他任务吗?
-
@mm8 我取消任务只是因为硬件以意外方式运行,取消任务后我仍然需要重新启动相同的作业。如果我忽略它,它会导致程序中的多个无用线程并有趣地卡住计算机吗?
-
@ErwinDraconis 检查一个属性需要一个while/for循环,对吧?但是程序没有循环来执行作业
标签: c# wpf multithreading