2011-09-20 26 views
6

我正在C#4.0(winforms)中工作,用10多個線程調試應用程序。在調試時,有一個下拉選擇我應該調試的線程(只能在斷點處訪問)。是否可以在Visual Studio調試器中命名一個線程?

這些顯示爲「Win32的主題」,「工作線程」,「RPC回調線程」,等等

我很想從我的代碼中爲它們命名。我通過後臺工作人員運行我的所有線程。

編輯:我的解決方案。這可能無法100%的時間,但它確實需要它。如果標籤在某些情況下是錯誤的,那在我正在處理的上下文中可以。

在每一次的BackgroundWorker的* _dowork事件,我把下面的一行代碼:

ReportData.TrySetCurrentThreadName(String.Format("{0}.{1}", MethodBase.GetCurrentMethod().DeclaringType, MethodBase.GetCurrentMethod().Name)); 

這是...

public static void TrySetCurrentThreadName(String threadName) 
    { 
    if (System.Threading.Thread.CurrentThread.Name == null) 
    { 
     System.Threading.Thread.CurrentThread.Name = threadName; 
    } 
    } 

回答

8

那麼你可以使用Thread.Name屬性,但你可以只寫一次 - 所以當你創建這個線程時,給它一個合適的名字。

+0

Windows中的API ['CreateThread'](http://msdn.microsoft.com/en-us/library/ms682453.aspx)不允許使用名稱。我假設.NET中的名稱只是佔位符?如果他們是,他們可能已被讀/寫(儘管我不能想到重命名線程的用例)。 – Abel

+0

由於我使用BackgroundWorkers來運行所有多線程,這是一個安全的操作嗎?我會假設它可能會根據需要重新使用線程,所以只命名一次可能是不可接受的。 – greggorob64

+0

@Abel:.NET線程並不一定是WinAPI線程周圍的精簡包裝。 – Vlad

1
Thread.CurrentThread.Name = "Give your name here"; 
+2

當名稱已經設置時,會拋出'System.InvalidOperationException'。 – Abel

+0

你說得對,名字只能設置一次。 – Maxim

相關問題