2011-09-20 9 views
6

Estoy trabajando en C# 4.0 (winforms), depurando una aplicación con más de 10 hilos. Durante la depuración, hay un menú desplegable para seleccionar qué hilo debo depurar (solo accesible durante un punto de interrupción).¿Es posible nombrar un hilo en el depurador de Visual Studio?

Estos se muestran como "Win32 hilo", "subproceso de trabajo", "RPC de devolución de llamada de rosca", etc ...

Me encantaría nombrarlos desde dentro de mi código. Estoy ejecutando todos mis hilos a través de trabajadores de fondo.

Editar: mi solución. Esto puede no funcionar el 100% del tiempo, pero hace exactamente lo que necesita. Si las etiquetas son incorrectas en algún caso, eso está bien en el contexto con el que estoy trabajando.

En caso _dowork * de cada BackgroundWorker, yo ponga la siguiente línea de código en:

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

¿Qué es ...

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

Respuesta

8

bien que se puede utilizar la propiedad Thread.Name, pero se puede solo escriba una vez, de modo que cuando cree el hilo, asígnele un nombre apropiado.

+0

API [ 'CreateThread'] (http://msdn.microsoft.com/en-us/library/ms682453.aspx) en Windows no permite nombres. ¿Asumo que los nombres en .NET son solo marcadores de posición? Si lo son, podrían haber sido de lectura/escritura (aunque no puedo pensar en un caso de uso para cambiar el nombre de un hilo). – Abel

+0

Dado que estoy usando BackgroundWorkers para ejecutar todos mis multihilo, ¿es una acción segura? Asumiría que puede reutilizar hilos según lo necesite, por lo que solo nombrar una vez puede no ser aceptable. – greggorob64

+0

@Abel: los hilos .NET no son necesariamente envoltorios delgados alrededor de los hilos WinAPI. – Vlad

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

Lanzará 'System.InvalidOperationException' cuando el nombre ya estaba establecido. – Abel

+0

Tiene razón, el nombre solo se puede establecer una vez. – Maxim

Cuestiones relacionadas