亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#線程終止和Thread.Abort()

C#線程終止和Thread.Abort()

不負相思意 2019-12-25 10:28:00
在MSDN中,對Thread.Abort()方法的描述說:“調用此方法通常會終止線程?!睘槭裁床豢偸牵吭谀姆N情況下它不會終止線程?還有其他終止線程的可能性嗎?
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

Thread.Abort()ThreadAbortException在線程上注入a 。線程可以通過調用取消請求Thread.ResetAbort()。此外,還有某些代碼部分,例如finally將在處理異常之前執行的塊。如果線程由于某種原因卡在這樣的塊中,則永遠不會在線程上引發異常。

由于調用者在調用時幾乎沒有控制線程的狀態Abort(),因此通常不建議這樣做。將消息傳遞給請求終止的線程。


查看完整回答
反對 回復 2019-12-25
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

在哪種情況下它不會終止線程?


這個問題是重復的。


使用Thread.Abort()有什么問題


還有其他終止線程的可能性嗎?


是。您的問題在于,您永遠不要啟動無法禮貌地告知要停止的線程,并且該線程會及時停止。如果您必須啟動一個線程,該線程可能會(1)難以停止,(2)越野車或最糟糕的(3)對用戶不利的情況,那么正確的做法是使一個新進程,在新進程中啟動線程,然后在您希望線程中斷時終止該進程。唯一可以確保安全終止不合作的線程的事情是操作系統,將其整個過程都銷毀了。


有關更多詳細信息,請參見我對這個問題的回答過長:


在C#中的循環內使用lock語句


最后一點是相關的,我討論了在中止線程之前應該等待多長時間殺死線程的注意事項。


查看完整回答
反對 回復 2019-12-25
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

為什么不總是?在什么情況下它不終止線程?


對于初學者來說,線程可能會抓住ThreadAbortException并取消自己的終止。否則,它可能會導致您嘗試中止計算所需的時間。因此,運行時無法保證在您請求線程之后線程將始終終止。


ThreadAbortException 有更多:


調用Abort方法銷毀線程時,公共語言運行庫將引發ThreadAbortException。ThreadAbortException是可以捕獲的特殊異常,但是它將在catch塊的末尾自動再次引發。引發此異常時,運行時將在結束線程之前執行所有的finally塊。由于線程可以在finally塊中進行無限制的計算,或調用Thread.ResetAbort()取消中止,因此無法保證線程將永遠結束。


您不需要Abort()手動創建線程。如果您只是讓線程中的方法返回,那么CLR將為您完成所有的工作。這將正常結束線程。


查看完整回答
反對 回復 2019-12-25
  • 3 回答
  • 0 關注
  • 2588 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號