System.Threading.Thread.Name是一次寫入屬性。我可以立即分配給它,只有當應用程序或庫代碼沒有進行其他分配時纔可以分配給它。我正在編寫一個多線程事件驅動的應用程序,並且非常希望能夠根據當前正在執行的任務來更改當前正在執行的線程的名稱。爲什麼我不能在.NET中更改Thread.Name?
有人知道爲什麼必須如此,或者這是CLR設計師的錯誤推定嗎?
System.Threading.Thread.Name是一次寫入屬性。我可以立即分配給它,只有當應用程序或庫代碼沒有進行其他分配時纔可以分配給它。我正在編寫一個多線程事件驅動的應用程序,並且非常希望能夠根據當前正在執行的任務來更改當前正在執行的線程的名稱。爲什麼我不能在.NET中更改Thread.Name?
有人知道爲什麼必須如此,或者這是CLR設計師的錯誤推定嗎?
我發現this old blog post說這是爲了一致性。
在我看來,它應該改回到可以設置的程度,就像我們所描述的那樣。當使用線程池時,我會很高興爲當前任務設置一個名稱,以便在調試器中這十個暫停的線程之間輕鬆區分。
這似乎是通過設計,我個人的猜測是內部的InformThreadNameChangeEx每個線程只能調用一次。
但是,您可以使用threadstatic字段來存儲當前正在運行的線程的名稱,然後使用此字段(例如用於日誌記錄)。
在線程池中,您可以保留一個字典,將初始名稱或線程ID映射爲某個自定義名稱作爲解決方法。 – 2009-10-05 11:18:09
是的,我知道,但是一旦我在查看字典和映射名稱,它會擊敗「在線程窗口中快速查看哪個線程正在做什麼」,因爲這是我唯一真正使用的線程名稱:用於在dev時間。爲了記錄目的,當然我已經使用其他方式。感謝您的意見。 – 2009-10-05 11:25:38