2009-07-20 12 views
3

重複:Killing a thread (C#) 如果在C#中花費太長時間,我該如何殺死一個線程?


我目前通過我的線程一個threadstart委託,並啓動它。

我需要一種方法來殺死這個線程,如果我在3秒內沒有收到迴應。

完成此操作的最佳方法是什麼?它不一定非要使用thread/threadstart,這正是我迄今爲止所使用的。

+1

爲什麼你需要在3秒後殺死線程? – Amy 2009-07-20 18:33:39

+0

這是由於我們使用的1個第三方組件的限制,我們無法訪問源代碼。 – alchemical 2009-07-20 18:46:19

+0

讓它在3秒後返回一個特殊響應,意思是「我超時了」。 – 2009-07-20 21:48:22

回答

13

殺死一個線程總是一個糟糕的主意,並且應該保留用於已經處理了一個即將殺死的病態進程的場景。你是否擁有線程中的代碼?如果國旗已經設好,也許會進行一些狀態檢查並乾淨地退出?

如果不是,並且您需要代碼在中止後工作,則單獨的進程可能比線程啓動更安全。至少你不會癱瘓你自己的代碼(例如,一個未釋放的鎖,或一個掛起的靜態構造函數/類型初始值設定項)。

5

你可以打電話myThread.Abort,它會(通常)殺死線程,但這通常是一個非常糟糕的主意。

將流產邏輯放入線程本身通常是一個更好的選擇。如果線程無法在3秒的時間內處理其工作,它可能會自行中止並返回適當的狀態。這是一個更安全的操作,並且從長遠來看將更易於維護。

相關問題