在VS2008我有一個程序,它偶爾會出現消費者線程停止處理工作的問題。當我看到ThreadState說停止。什麼導致線程停止?我沒有阻止它。沒有例外。似乎很奇怪。 謝謝線程狀態已停止。沒有例外。這是怎麼回事?
回答
也許線程被終止?
根據此:http://msdn.microsoft.com/en-us/library/system.threading.threadstate.aspx 僅當線程終止或響應中止請求時,線程才處於停止狀態。
你確定沒有例外嗎?
A try
catch
您的主線程不會捕獲工作線程上的異常。
在另一個線程的啓動方法中,有一個try
catch
塊,然後在主線程上返回一個事件,或緩存具有啓動方法的對象上的屬性的異常,然後檢查該屬性是否在主線程。
希望這會有所幫助。
例如
class Worker
{
public Exception TheadException { get; private set; }
public void Start()
{
try
{
// Do your thing
}
catch (Exception ex)
{
TheadException = ex;
}
}
}
....
static void Main(string[] args)
{
Worker workerObject = new Worker();
var workerThread = new System.Threading.Thread(workerObject.Start);
workerThread.Start();
workerThread.Join();
if (workerObject.TheadException != null)
Console.WriteLine("Thread failed with exception {0}", workerObject.TheadException);
}
+1謝謝,我在這裏學到了一些重要的東西。我一直主要使用ThreadPool進行線程處理,因爲大部分時間都是短暫的。在'BeginInvoke' /'EndInvoke'的情況下,只要你記得調用'EndInvoke',你就可以在線程之外處理異常。我有點懷疑,所以我必須運行你的代碼才能看到我自己。 :)我不知道爲什麼這樣做。對我來說,似乎並不一致(我寧願後一種處理方式),但現在我知道如何處理它。 – Dave 2010-11-08 15:06:22
謝謝,我還沒有使用過ThreadPool,因爲我們使用的大多數/所有線程都將在UI或Windows服務的生命中生存,但很好的瞭解開始/結束調用。我必須看看:) – 2010-11-08 15:24:09
- 1. 這是怎麼回事?
- 2. 這是怎麼回事?
- 3. 這是怎麼回事
- 4. 這是怎麼回事?
- 5. 這是怎麼回事?
- 6. 這是怎麼回事?
- 7. 線程突然停止,沒有例外或錯誤消息
- 8. MaualResetEventSlim沒有停止線程
- 9. 程序已停止工作。打破例外:類'_LocalLibraryMirror'沒有實例獲取'類'
- 10. GHCi看到Happstack.Server,但GHC沒有。這是怎麼回事?
- 11. <%= PerformSomeFunction()%>這是怎麼回事?
- 12. 這15個是怎麼回事?
- 13. 這個功能是怎麼回事?
- 14. 這個函數(haskell)是怎麼回事?
- 15. 按位操作 - 這是怎麼回事?
- 16. Helvetica Neue字體 - 這是怎麼回事?
- 17. Apache版本2.1 - 這是怎麼回事?
- 18. 不知道這是怎麼回事
- 19. <%$,<%@,<%=,<%#...這是怎麼回事?
- 20. 這個C++代碼是怎麼回事?
- 21. 這個preg_replace是怎麼回事?
- 22. 這是怎麼回事:rspec stub(:new).with ...?
- 23. 這段代碼是怎麼回事?
- 24. 這個x86指令是怎麼回事?
- 25. 這是怎麼回事與我的mod_rewrite?
- 26. 這段代碼是怎麼回事?
- 27. EventHandler:這段代碼是怎麼回事?
- 28. 這個html5lib腳本是怎麼回事?
- 29. 線程查看動畫...怎麼回事?
- 30. 線程在其ThreadStart例程返回時是否自動停止?
或許線程 「跑出來」?就像在自動停止的過程中一樣,並且優雅地終止......? – 2010-11-08 14:12:21
你能發表一些代碼嗎?可能有多種原因,雖然可能沒有拋出異常,但是可能導致代碼退出。沒有什麼可看的東西很難說清楚! – 2010-11-08 14:13:31