thread net iniciar hilos asp c# multithreading thread-state

c# - net - Como comprobar si Thread terminó de ejecutarse



iniciar hilos en vb net (8)

¿Por qué no llamar a Thread.Join(TimeSpan.Zero) ? No bloqueará a la persona que llama y devuelve un valor que indica si el subproceso ha completado su trabajo. Por cierto, esa es la forma estándar de probar todas WaitHandle clases de WaitHandle también.

Tengo el siguiente problema:

Quiero verificar (C #) si un subproceso ha finalizado su ejecución, es decir, si el método de subproceso ha regresado. Lo que hago ahora es llamar a Thread.Join(1) , pero esto da un retraso de 1 ms. ¿Hay alguna manera de simplemente comprobar si un hilo ha terminado. Inspeccionar Thread.ThreadState parece demasiado engorroso.


Depende de cómo quieras usarlo. Usar una unión es una forma. Otra forma de hacerlo es dejar que el hilo notifique a la persona que llama del hilo mediante un evento. Por ejemplo, cuando tiene el hilo de la interfaz gráfica de usuario (GUI) que llama a un proceso que se ejecuta durante un tiempo y necesita actualizar la GUI cuando termina, puede usar el evento para hacer esto. Este sitio web le da una idea sobre cómo trabajar con eventos:

http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx

Recuerde que dará lugar a operaciones de subprocesos cruzados y, en caso de que desee actualizar la GUI desde otro hilo, deberá utilizar el método Invoke del control que desea actualizar.



Para un hilo tienes la propiedad myThread.IsAlive . Es falso si el método de hilo regresó o el hilo fue abortado.


Podría terminar un evento desde su hilo cuando finalice y suscribirse a eso.

Alternativamente, puede llamar a Thread.Join() sin ningún argumento:

Bloquea el subproceso de llamada hasta que un subproceso termina, mientras continúa realizando el bombeo estándar de COM y SendMessage.

Thread.Join(1) será:

Bloquea el subproceso de llamada hasta que finaliza un subproceso o transcurre el tiempo especificado, mientras continúa realizando el bombeo estándar de COM y SendMessage.

En este caso el tiempo especificado es de 1 milisegundo.


Por qué no bandera de Thread.IsAlive . Esto es para dar el estado del hilo.


Si no desea bloquear el subproceso actual esperando / comprobando la finalización del otro subproceso en ejecución, puede implementar un método de devolución de llamada como este.

Action onCompleted = () => { //On complete action }; var thread = new Thread( () => { try { // Do your work } finally { onCompleted(); } }); thread.Start();

Si está tratando con controles que no son compatibles con la operación de subprocesos, entonces tiene que invocar el método de devolución de llamada

this.invoke(onCompleted);


Uso IsAlive extensivamente, a menos que quiera bloquear la ejecución actual (del subproceso que llama), en cuyo caso simplemente llamo Join () sin un parámetro. Ahora, tenga en cuenta que IsAlive puede devolver falso si el subproceso de destino aún no ha iniciado la ejecución por alguna razón.

Carlos Merighe.