En aras de la discusión, considere un subproceso de interfaz de usuario como un subproceso que ha recibido una llamada al Application.Run()
o una de sus sobrecargas invocadas y tiene un bucle de mensaje activo ejecutándose.¿Cómo detectar si estamos en un hilo de interfaz de usuario?
¿Hay alguna manera de detectar si actualmente estamos ejecutando un hilo de este tipo?
La razón por la que quiero esto es porque tengo una clase con una función privada de larga ejecución. La clase en sí misma ya está multiproceso y el uso de esta clase es tal que se puede usar desde la IU o desde los hilos de fondo que están procesando. Esta función también cae en esta red. Pero no quiero que bloquee el hilo de UI. Así que quiero detectar si estoy ejecutando un subproceso de UI y, de ser así, mover la llamada de función a un hilo de fondo (probablemente ThreadPool
, pero eso no es un problema para esta discusión). Esto se comporta completamente bien, pero los hilos de fondo probablemente dependen de la salida de la función, por lo que es mejor bloquearlos, mientras que el hilo de la interfaz de usuario está accediendo a ella de una manera más "configurada y olvidada".
El hilo de inicio no es necesariamente el hilo de la GUI, o el único hilo de la GUI. –
INCORRECTO: InvokeRequired devuelve verdadero si está en un "hilo diferente al que se creó el control" –
@Rico: Sí, por supuesto. No puedo creer que el error tipográfico haya estado ahí durante los últimos tres años y que nadie se haya dado cuenta. Gracias por atraparlo, actualicé la respuesta en consecuencia. –