2011-09-20 15 views
6

Pracuję w C# 4.0 (WinForm), debugując aplikację z ponad 10 wątkami. Podczas debugowania pojawi się menu rozwijane, aby wybrać wątek, który powinienem debugować (dostępny tylko podczas przerwania).Czy można nazwać wątek w debugerze Visual Studio?

one pokazać się jako „gwint Win32”, „pracownik”, „wątek RPC oddzwaniania nici”, etc ...

Chciałbym wymienić je od wewnątrz mojego kodu. Wszystkie moje wątki uruchamiam za pośrednictwem pracowników w tle.

Edytuj: moje rozwiązanie. To może nie działać w 100% przypadków, ale robi dokładnie to, czego potrzebuje. Jeśli etykiety są w niektórych przypadkach błędne, jest to w porządku w kontekście, w którym pracuję.

AT * _dowork przypadku każdego BackgroundWorker jest, umieścić następującą linię kodu w:

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

co jest ...

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

Odpowiedz

8

Cóż można użyć właściwości Thread.Name, ale można napisz do niego tylko raz - więc gdy utworzysz utworzysz wątek, nadaj mu odpowiednią nazwę.

+0

API ['CreateThread'] (http://msdn.microsoft.com/en-us/library/ms682453.aspx) w systemie Windows nie zezwala na nazwy. Zakładam, że nazwy w .NET są po prostu symbolami zastępczymi? Jeśli tak, to można by je odczytać/zapisać (chociaż nie mogę wymyślić przypadku użycia do zmiany nazwy wątku). – Abel

+0

Ponieważ używam BackgroundWorkers do uruchamiania wszystkich moich wielowątkowość, czy jest to bezpieczne działanie? Zakładam, że może on ponownie wykorzystywać wątki zgodnie z potrzebami, więc tylko nazewnictwo może być niedopuszczalne. – greggorob64

+0

@Abel:. Wątki .NET niekoniecznie są cienkimi opakowaniami wokół wątków WinAPI. – Vlad

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

Rzucę 'System.InvalidOperationException', gdy nazwa jest już ustawiona. – Abel

+0

Masz rację, nazwę można ustawić tylko raz. – Maxim

Powiązane problemy