c# - requested - ¿Cómo salir de todos los hilos en ejecución?
multihilos en c# (5)
Esto debería funcionar para todos los hilos que abriste.
protected override void OnExiting(Object sender, EventArgs args)
{
base.OnExiting(sender, args);
Environment.Exit(Environment.ExitCode);
}
El siguiente código no sale de la aplicación. ¿Cómo puedo salir de la aplicación y asegurarme de que todos los subprocesos en ejecución estén cerrados?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
Esto hizo el trabajo por mí:
En lugar de usar:
Application.Exit()
que deja abiertos otros hilos, intente usar:
Environment.Exit(Environment.ExitCode);
No muestra el uso de ningún subproceso en su código, pero supongamos que tiene subprocesos en él. Para cerrar todos sus hilos, debe configurarlos todos en hilos de fondo antes de iniciarlos, luego se cerrarán automáticamente cuando la aplicación salga, por ejemplo:
Thread myThread = new Thread(...);
myThread.IsBackground = true; // <-- Set your thread to background
myThread.Start(...);
Un artículo de "HOWTO: Stop Multiple Threads" de microsoft: http://msdn.microsoft.com/en-us/library/aa457093.aspx
Pasé por un problema similar en mi software, pero desafortunadamente simplemente hacer que los hilos funcionaran en segundo plano no resolvió el problema. De hecho, mientras que el hilo trae de vuelta los datos (el software principal es impulsado por los datos) y si cierro la aplicación, resulta en un error de Windows, dando lugar a un mensaje de depuración.
Entonces, ¿qué funcionó realmente para mí?
Paso 1: Hizo que todos los hilos se ejecutaran en segundo plano, como
Thread aThread = new Thread(MethodName);
aThread.IsBackground = true; //<-- Set the thread to work in background
aThread.Start();
Paso 2: en la acción de cierre del formulario / aplicación, llame al método Environment.Exit, como
Environment.Exit(Environment.ExitCode);
Esto mantuvo la memoria administrada perfectamente, sin pérdida de memoria.
Espero que esto ayude.
Puedes probar el siguiente código:
Environment.Exit(Environment.ExitCode);