2008-08-25 8 views

Respuesta

14

No es necesario que lo interrumpa. Cuando su aplicación finalice, .NET matará cualquier subproceso con IsBackground = true. .NET threadpool tiene todos sus subprocesos configurados en IsBackground = true, por lo que no tiene que preocuparse por ello.

Ahora, si está creando subprocesos al actualizar la clase Thread, deberá cancelarlos o establecer su propiedad IsBackground en verdadero.

2

Sí, lo harán. Sin embargo, si está utilizando recursos no administrados en esos hilos, puede terminar en muchos problemas.

3

El subproceso de subprocesos utiliza subprocesos de fondo. Por lo tanto, todos se cerrarán automáticamente cuando la aplicación finalice.

Si desea abortar un hilo usted mismo, tendrá que administrar el hilo usted mismo (para que pueda llamar a Thread.Abort() en el objeto de hilo) o tendrá que configurar algún mecanismo de notificación que le permitirá decir al hilo que debería abortarse a sí mismo.

10

Sin embargo, si está utilizando no administrados recursos en esos hilos, es posible que terminar en un montón de problemas.

que prefiere depender de la forma en que estaba usando ellos - si estos recursos no administrados fueron envueltos correctamente entonces tendrían ser tratados por su finalización envoltorio independientemente del mecanismo que se utiliza para matar las discusiones que les había referenciados. Y los recursos no administrados son liberados por el sistema operativo cuando una aplicación sale de todos modos. Existe una sensación general de que las aplicaciones (Windows) pasan demasiado tiempo intentando limpiar el apagado de la aplicación (a menudo con paginación) en grandes cantidades de memoria solo para poder descartarla de nuevo (o paginación) en el código que se ejecuta alrededor de la liberación de objetos no manipulados que el sistema operativo trataría de todos modos).

0

Sí, son de fondo, pero f.ex si tiene una aplicación en la que utiliza ThreadPool para descargar un poco o cosas por el estilo, y desea detenerlas, ¿cómo se detiene? mi sugerencia sería: salida de rosca cuanto antes, f.ex

bool stop = false; 
void doDownloadWork(object s) 
{ 
    if (!stop) 
    { 
     DownloadLink((String)s, location); 
    } 
} 

y si se establece parada = true, segundo (actualmente en la cola) hilos de salir de forma automática, después de hilos de cola que termina el proceso.

+0

(respuesta de Guenther noet) –

0

De acuerdo con la respuesta de Lukas Šalkauskas.

embargo, usted debe utilizar:

volatile bool stop = false; 

indicarle al compilador que esta variable es usada por varios hilos.

+0

la palabra clave volátil es para fines mucho más específicos que solo una variable utilizada por varios hilos. Hay buenos momentos para usarlo y los malos tiempos, aunque el uso en este escenario parece ser apropiado. Simplemente no quería que nadie viniera a pensar que deberían hacer eso para todas las variables de acceso múltiple.Es como decir que nunca se deben usar transacciones y especificar siempre sugerencias de nolock en SQL cuando esa afirmación depende en gran medida de la solución que se tenga entre manos. – TheXenocide

Cuestiones relacionadas