Cuando lanzamos un nuevo hilo de ejecución en una aplicación, éste puede ejecutarse en segundo plano o no. Depende del valor que tenga la propiedad IsBackground del objeto Thread asociado.

Los subprocesos en segundo plano son idénticos a los subprocesos en primer plano, pero los subprocesos en segundo plano no impiden que un proceso finalice. Es decir, un proceso en primer plano permanece "asociado" al proceso que lo lanzó y no permite que éste termine hasta que él mismo a su vez haya terminado su ejecución. Por el contrario, cuando hay procesos en segundo plano (IsBackground = true) y terminan todos los procesos en primer plano que pertenecen a un determinado proceso, la CLR finaliza el proceso llamando al método Abort de todos los subprocesos en segundo plano que todavía se estén ejecutando.

En resumen: si tenemos un proceso en segundo plano debemos asegurarnos de que termina antes de que lo haga el proceso principal que lo lanzó o se suspenderá automáticamente y no terminará su trabajo. Si cambiamos su propiedad IsBackground para que sean de primer plano (false) entonces o habrá problema.

Todo esto viene a raíz de lanzar métodos de forma asíncrona. Cuando se usa la invocación asíncrona de algún método (con BeginInvoke) la CLR genera automáticamente un subproceso paralelo en segundo plano, y si no tenemos cuidado podemos cancelarlo inadvertidamente al cerrar el proceso principal (cerrando la aplicación, por ejemplo).

NOTA: Gracias a Germán Castro, programador de krasis, por darse cuenta de esto último y comentármelo.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor