C# 关闭前景线程的正确方法

C# 关闭前景线程的正确方法,c#,multithreading,C#,Multithreading,关闭应用程序时,同时关闭前台线程的最佳方法是什么 从我所有的研究来看,最好的办法似乎是实现 这是正确的还是有更好的方法?我对此持怀疑态度,因为它似乎没有遵循微软通常的描述性方法名称模式。它肯定会工作,当主启动退出时,CLR将中止这样的线程。非常类似于使用Thread.Abort(),减去使用Abort()通常会遇到的严重故障模式。这是一个粗鲁的中止,线程本身无法阻止它。之后运行的代码也不会因为从Abort()中遇到的典型问题(如死锁)而失败。除了终结器 然而,将其称为“正确”有点牵强,线程也无法

关闭应用程序时,同时关闭前台线程的最佳方法是什么

从我所有的研究来看,最好的办法似乎是实现


这是正确的还是有更好的方法?我对此持怀疑态度,因为它似乎没有遵循微软通常的描述性方法名称模式。

它肯定会工作,当主启动退出时,CLR将中止这样的线程。非常类似于使用Thread.Abort(),减去使用Abort()通常会遇到的严重故障模式。这是一个粗鲁的中止,线程本身无法阻止它。之后运行的代码也不会因为从Abort()中遇到的典型问题(如死锁)而失败。除了终结器


然而,将其称为“正确”有点牵强,线程也无法干净地终止。如果它有外部可观察的行为,这可能是有害的。比如更新数据库、通过套接字交谈或编写文件。这也会被粗暴地打断,可能会留下一个混乱的服务器或一个半写的文件,这可能会在以后引起麻烦。一种缓解情况是,当您的程序因未处理的异常而死亡时,也会发生这种情况,您希望它不会造成问题。这取决于:)

如果您的代码可以任意决定是程序关闭的时候了,并且只是导致所有前台线程退出,这表明这些线程首先应该是后台线程。请看这里或@Damien_the_unsiver-我同意您的看法,它是通过一次关于强制关闭一个新的application@ClarkKent-这似乎表明我是对的。。感谢最好的方法是不要开始一个你不能轻易要求停止的线程。如果你这样做,那么问题很容易得到回答:要求所有线程停止。完全同意这一点(以及其他非常感谢的评论!)一个线程应该有机会在其适当的时候关闭,我想我是在寻找破坏性最小的方法来关闭一个线程,如果需要的话,我今天晚些时候会接受这个。再次感谢你,汉斯