Me gustaría poder nombrar un BackgroundWorker para que sea más fácil de depurar. es posible?Nombrando BackgroundWorker
Respuesta
Tendría que intentar pero ¿no puedes simplemente configurar el Name del hilo en el método DoWork() ejecutado por el BackgroundWorker?
ACTUALIZACIÓN: Me acaba de intentar la siguiente línea de código como la primera declaración del método DoWork() mis BackgroundWorkers y funciona:
if (Thread.CurrentThread.Name == null)
Thread.CurrentThread.Name = "MyBackgroundWorkerThread";
ACTUALIZACIÓN: Como Jonathan Allen declaró correctamente el nombre de un hilo es escribir una vez, así que agregué una verificación nula antes de configurar el nombre. Un intento de escribir el nombre por segunda vez daría como resultado una InvalidOperationException. Como Marc Gravell escribió también podría dar a la depuración más difícil tan pronto como hilos de fondo agrupados son reutilizados para otros trabajos, por lo que las discusiones de nombre sólo si es necesario ..
Creo que eso es peligroso. Solo puede establecer el nombre en un hilo una vez, pero los hilos que usan los trabajadores de fondo pueden reutilizarse. –
Estoy de acuerdo con @Jonathan: si no es su hilo, no debería nombrarlo. –
puede asignar nombres a las discusiones en los "hilos" -window cuando está depurando en Visual Studio.
public class NamedBackgroundWorker : BackgroundWorker
{
public NamedBackgroundWorker(string name)
{
Name = name;
}
public string Name { get; private set; }
protected override void OnDoWork(DoWorkEventArgs e)
{
if (Thread.CurrentThread.Name == null) // Can only set it once
Thread.CurrentThread.Name = Name;
base.OnDoWork(e);
}
}
Acabo de consultar con Reflector. BackgroundWorker.RunWorkerAsync usa subprocesos de grupo de subprocesos. Como el nombre de un hilo solo se puede establecer una vez, el código arrojará una excepción si usa el mismo hilo de subprocesos dos veces. –
.NET 4.0 usa un tipo anidado "private delegate void WorkerThreadStartDelegate (argumento de objeto);" Y llaman a BeginInvoke, por lo que puedo ver que no usan ThreadPool, pero está en lo correcto, debería haber comprobado si el Nombre era nulo antes de configurarlo. – XIU
Se puede extender el trabajador de fondo a través de una clase personalizada:
`
public class NamedBackgroundWorker : BackgroundWorker
{
public string Name;
public BackgroundWorker(string Name)
{
this.Name = Name;
}
}
` Ahora acaba de crear un objeto a partir de esto y puede que el nombre y utilizarlo como un fondo obrero.
Esta respuesta es la misma que la respuesta anterior de XIU, pero con una explicación un poco mejor – Jmons
- 1. Nombrando nodos en Erlang
- 2. Nombrando funciones jQuery
- 3. Nombrando un ensamblado "central"
- 4. Nombrando DataContracts genéricos en WCF
- 5. std :: thread - nombrando su hilo
- 6. Backgroundworker abortar
- 7. Cancelar backgroundworker
- 8. Nombrando la columna ID de MYSQL
- 9. C# Cultura de BackgroundWorker
- 10. BackgroundWorker y WebBrowser Control
- 11. BackgroundWorker con métodos anónimos?
- 12. BackgroundWorker and Threads
- 13. Actualizar GUI usando BackgroundWorker
- 14. BackgroundWorker RunWorkerCompletedEventArgs.Cancelled siempre falsas
- 15. BackgroundWorker RunWorkerCompleted Evento
- 16. ¿Cómo utilizar un BackgroundWorker?
- 17. C# backgroundWorker informa cadena?
- 18. BackgroundWorker manejo de excepciones
- 19. Cómo detener BackgroundWorker correctamente
- 20. Componente BackgroundWorker en servicios
- 21. Cargando imágenes en BackgroundWorker
- 22. Diferencia entre BackgroundWorker y Thread?
- 23. ¿El BackgroundWorker brinda subprocesos reales?
- 24. BackgroundWorker acceso multiproceso al formulario
- 25. C# Winform ProgressBar y BackgroundWorker
- 26. Excepciones no controladas en BackgroundWorker
- 27. Problema WPF/BackgroundWorker y BitmapSource
- 28. BackgroundWorker No funciona en VSTO
- 29. Tiempo de espera para BackgroundWorker
- 30. Backgroundworker no informará el progreso
Como señaló Jonathan en el comentario sobre la respuesta aceptada, esto presenta un riesgo * real * de causar confusión, al poner un nombre en un hilo que luego se reutiliza para otra cosa. No es tu hilo; no intentes nombrarlo Si desea un hilo con nombre, cree uno propio (en lugar de utilizar 'BackgroundWorker'). –