簡體   English   中英

正確的方法關閉前台線程

[英]Correct way to close a foreground thread

關閉應用程序時,同時關閉前台線程的最佳方法是什么?

根據我的所有研究,似乎最好的方法是將IsBackground設置為true。

這是正確的還是有更好的方法? 我對此表示懷疑,因為它似乎沒有遵循Microsoft通常描述性的方法名稱模式。

它肯定會工作,當您的主啟動退出時,CLR將中止類似的線程。 與使用Thread.Abort()非常相似,減去使用Abort()通常會遇到的嚴重故障模式。 這是一個不禮貌的中止,線程本身無法停止它。 而且,由於您從Abort()獲得的典型問題(如死鎖),以后不會再運行任何可能失敗的代碼。 除了終結器。

然而,稱它為“正確”有點費勁,線程也無法做任何干凈地終止的事情。 如果它具有外部可觀察到的行為,則可能是有害的。 就像更新dbase,通過套接字交談或寫入文件一樣。 這也被粗暴地打斷了,有可能留下混亂的服務器或半寫的文件,這可能會在以后引起麻煩。 減輕影響的情況是,當程序因未處理的異常而死亡時,也會發生這種情況,您希望它也不會引起麻煩。 這取決於 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM