2009-02-12 16 views
6

¿Es posible "matar" el hilo de un BackgroundWorker?¿Es posible matar el hilo de BackgroundWorker?

En mi evento DoWork, no puedo verificar el indicador de cancelación, porque tengo una llamada de bloqueo a una interfaz COM externa o una consulta a una base de datos. CancelAsync no cancela la llamada a COM.

¿Cómo puedo hacerlo, por favor? Cualquier sugerencia será muy apreciada.

Gracias de antemano.

Respuesta

1

No conozco una forma segura de abortar un hilo.

Un trabajador de segundo plano puede comprobar si se debe cancelar y cancelarse a sí mismo, pero si no está consultando una base de datos, no hay mucho que pueda hacer hasta que vuelva.

Puede trabajar en un subproceso de ThreadPool y simplemente abandone el subproceso y comience otro si ya no es necesario (asegurándose de que cuando vuelve de una consulta de base de datos comprueba si se debe cancelar antes de hacer algo desagradable). Por supuesto, necesitaría equilibrar el rendimiento y administrar la sincronización de hilos. Si sigues ese camino, puedes echar un vistazo a la clase estática Interbloqueada para un bloqueo eficiente de la sección crítica.

3

No, no puede matar el hilo BackgroundWorker, solo puede intentar cancelarlo como lo ha notado, pero requiere alguna interacción del propio hilo de fondo para detener el trabajo: "El código del trabajador debe revisar periódicamente el CancellationPending propiedad para ver si se ha establecido en true. "(c) MSDN

Si necesita un control total sobre un hilo, tendrá que crearlo por sí mismo utilizando Thread clase.

+0

¿Alguna buena muestra con todas las fuentes de código? gracias –

+0

Busque discusiones en Thread, Thread.Abort, ThreadStart. –

Cuestiones relacionadas