3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
Thread.Abort()
ThreadAbortException
在線程上注入a 。線程可以通過(guò)調(diào)用取消請(qǐng)求Thread.ResetAbort()
。此外,還有某些代碼部分,例如finally
將在處理異常之前執(zhí)行的塊。如果線程由于某種原因卡在這樣的塊中,則永遠(yuǎn)不會(huì)在線程上引發(fā)異常。
由于調(diào)用者在調(diào)用時(shí)幾乎沒(méi)有控制線程的狀態(tài)Abort()
,因此通常不建議這樣做。將消息傳遞給請(qǐng)求終止的線程。

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
在哪種情況下它不會(huì)終止線程?
這個(gè)問(wèn)題是重復(fù)的。
使用Thread.Abort()有什么問(wèn)題
還有其他終止線程的可能性嗎?
是。您的問(wèn)題在于,您永遠(yuǎn)不要啟動(dòng)無(wú)法禮貌地告知要停止的線程,并且該線程會(huì)及時(shí)停止。如果您必須啟動(dòng)一個(gè)線程,該線程可能會(huì)(1)難以停止,(2)越野車或最糟糕的(3)對(duì)用戶不利的情況,那么正確的做法是使一個(gè)新進(jìn)程,在新進(jìn)程中啟動(dòng)線程,然后在您希望線程中斷時(shí)終止該進(jìn)程。唯一可以確保安全終止不合作的線程的事情是操作系統(tǒng),將其整個(gè)過(guò)程都銷毀了。
有關(guān)更多詳細(xì)信息,請(qǐng)參見(jiàn)我對(duì)這個(gè)問(wèn)題的回答過(guò)長(zhǎng):
在C#中的循環(huán)內(nèi)使用lock語(yǔ)句
最后一點(diǎn)是相關(guān)的,我討論了在中止線程之前應(yīng)該等待多長(zhǎng)時(shí)間殺死線程的注意事項(xiàng)。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
為什么不總是?在什么情況下它不終止線程?
對(duì)于初學(xué)者來(lái)說(shuō),線程可能會(huì)抓住ThreadAbortException并取消自己的終止。否則,它可能會(huì)導(dǎo)致您嘗試中止計(jì)算所需的時(shí)間。因此,運(yùn)行時(shí)無(wú)法保證在您請(qǐng)求線程之后線程將始終終止。
ThreadAbortException 有更多:
調(diào)用Abort方法銷毀線程時(shí),公共語(yǔ)言運(yùn)行庫(kù)將引發(fā)ThreadAbortException。ThreadAbortException是可以捕獲的特殊異常,但是它將在catch塊的末尾自動(dòng)再次引發(fā)。引發(fā)此異常時(shí),運(yùn)行時(shí)將在結(jié)束線程之前執(zhí)行所有的finally塊。由于線程可以在finally塊中進(jìn)行無(wú)限制的計(jì)算,或調(diào)用Thread.ResetAbort()取消中止,因此無(wú)法保證線程將永遠(yuǎn)結(jié)束。
您不需要Abort()手動(dòng)創(chuàng)建線程。如果您只是讓線程中的方法返回,那么CLR將為您完成所有的工作。這將正常結(jié)束線程。
- 3 回答
- 0 關(guān)注
- 2586 瀏覽
添加回答
舉報(bào)