【问题标题】:Correct way to close a foreground thread关闭前台线程的正确方法
【发布时间】:2013-07-26 23:45:55
【问题描述】:

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

从我所有的研究来看,似乎最好的方法是将IsBackground 设置为true..

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

【问题讨论】:

  • 如果你的代码可以任意决定是时候关闭程序,并且只是导致所有前台线程退出,这表明这些线程应该首先是后台线程.
  • @Damien_The_Unbeliever - 我同意你的看法,这是通过关于强制关闭应用程序的不同问题的对话提出的
  • @ClarkKent - 这似乎表明我是对的......谢谢
  • 最好的方法是不要启动一个你不能轻易要求停止的线程。如果你这样做了,那么问题就很容易回答了:要求所有线程停止。

标签: c# multithreading


【解决方案1】:

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

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

【讨论】:

  • 完全同意这一点(以及其他非常感谢的 cmets!)应该给线程每一个机会在适当的时候关闭,我想我正在寻找破坏性最小的关闭方式如果需要一个线程,将在今天晚些时候接受这个。再次感谢,汉斯
猜你喜欢
  • 2012-04-12
  • 2012-03-08
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多