为什么thread.IsAlive - thread.Abort()不起作用?

时间:2017-10-26 13:15:12

标签: c# wpf multithreading

我正在尝试将我的主题调度为

private Thread thread;
. . .
if(thread != null && thread.IsAlive) thread.Abort();
. . .
thread = new Thread(myProcess);
thread.Start();

从一开始就启动myProcess,如果它已经运行的话。 但是,它永远不会出现在thread.Abort()和WPF UI响应时间上仍然非常糟糕。

我怎么能正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

所以,我的帖子中的所有对话,以及StackOverflow之外的讨论,我发现,我问的是一个非常基本的问题,任何解决方案都不是Microsoft Windows架构:

当外部任务在带有API的某个线程中启动并且它正在运行时,无法取消此执行,并将其返回到初始挂起状态,而是另一个API(如"取消" in ProgressBar)专门将它返回到空闲循环等待。

在其他时间共享操作系统中存在这样一个特殊点,但不存在于Windows中。 因此,当没有描述取消API接口时,我们应该从胎面池运行另一个线程以节省系统中的CPU时间,并等待,直到不必要的一个完成。

Tekla开发人员的回应证实了我的结论: "这种方法不存在。正如我之前所写,在您的应用中实现多线程无法改善性能改变颜色,因为TeklaStructures内部代码不使用它。"