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;
}
}
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
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
@Abel:. Wątki .NET niekoniecznie są cienkimi opakowaniami wokół wątków WinAPI. – Vlad