¿Cómo puedo garantizar que todos los subprocesos del programa se cancelen después de haber cerrado la ventana principal?¿Cómo puedo forzar que todos los subprocesos de programa salgan al cerrar el programa?
Respuesta
- Si ha diseñado bien el subprocesamiento, debe tener un mecanismo para cerrarlos, p. Ej. utilizar un
ManualResetEvent
para señalar que cierren - Puede Thread.Join que esperar hasta que se cierran o Thread.Abort tenerlos abortan de manera desagradable
- Si son hilos de fondo, que se cerrará cuando la aplicación hace
Consulte también: http://msdn.microsoft.com/en-us/library/7a2f3ay4(v=vs.80).aspx
Agregaré el comentario estándar - nunca use abort (haga una búsqueda aquí en S/O para ver todos los detalles sobre por qué es una muy mala idea). –
Sin embargo, lea sobre por qué, porque en la mayoría de los casos es un compromiso perfectamente aceptable. "Nunca uso abortar" es incorrecto, me temo. –
Punto justo. ¿Qué tal si no lo haces a menos que comprendas los argumentos en contra y no tengas una alternativa? –
los recogen en algún lugar, como
static public List<Thread> AllThreads;
y utilizar esa colección a .Abort()
ellos, uno por uno.
Este es el DURO y MAL manera. Mejor sería señalarles que se detengan de alguna manera, y luego .Join()
uno por uno.
¿Quiere decir '.Abort()'? '.Terminate' no existe –
Además, si tiene una lista, ¿por qué no' AllThreads.ForEach (t => t.Abort()); '? –
@KierenJohnstone cuando dije terminarlos uno por uno, eso es exactamente lo que quise decir. Lambda, o no, los estás terminando uno a uno. –
Usted puede establecer la propiedad "IsBackground" true. CLR cierra todos los hilos de fondo cuando la aplicación sale.
Dejando que el programa realmente cierre, es decir. no introduzca deliberadamente ningún código que fuerce al hilo que ejecuta la ventana principal a esperar otros hilos. El hilo que ejecuta la ventana principal será libre de salir de Process() y el sistema operativo abortará todos los otros hilos en su proceso, sin importar lo que estén haciendo.
Rgds, Martin
De manera predeterminada en .NET, los hilos que no son de fondo significarán que la aplicación no se "cerrará". Si llama a ExitProcess (que se llama Environment.Exit en el mundo .NET), eso funcionaría –
Vaya, leí mal la etiqueta 'C#': ((Haciendo C++ en este momento ... –
establecer la propiedad IsBackground
true, y añadir las siguientes líneas:
AppDomain.CurrentDomain.ProcessExit += CloseMe; // for the main process
AppDomain.CurrentDomain.DomainUnload += CloseMe; // for ApplicationDomains
dejar que el método CloseMe
establece un indicador que se comprueba en el bucle principal de la rosca.
Trate
Application.ExitThread();
Environment.Exit(0);
o
Dispatcher.CurrentDispatcher.Thread.Abort();
- 1. notificar View (Modelos) de cerrar el programa
- 2. Cómo cerrar un jframe sin cerrar el programa principal
- 3. ¿Se está ejecutando un método al cerrar el programa?
- 4. Asegurando que los subprocesos están muertos al salir del programa de Python
- 5. ¿Cómo se limpia el programa al salir del programa javafx?
- 6. ¿Cómo cerrar un programa usando python?
- 7. El socket permanece abierto después de cerrar el programa (C++)
- 8. ¿Cómo instalar atajos de programa para todos los usuarios?
- 9. Cómo cerrar todos los ejecutores al salir de una aplicación?
- 10. ¿Cómo suspender todos los hilos después de que se cuelgue mi programa?
- 11. Un programa que crea otro programa
- 12. ¿Cómo se programa usar todos los procesadores en su máquina?
- 13. Obtener el número de subprocesos RTS en el programa Haskell?
- 14. Cómo cerrar una aplicación java desde el programa
- 15. Predecir que el programa fallará
- 16. Xcode Error al iniciar el programa remoto
- 17. ¿Cómo puedo llamar al programa python desde VBA?
- 18. ¿Cómo puedo hacer que enlace mi gran programa?
- 19. Cómo matar todos los subprocesos de shell?
- 20. ¿Cómo cerrar un socket dejado abierto por un programa destruido?
- 21. Interbloqueo en un solo programa de subprocesos Java
- 22. ¿Hay algún programa que pueda ayudar a entender otro programa?
- 23. ¿Cómo se gestiona un directorio temporal de modo que se garantice su eliminación al cerrar el programa?
- 24. Cambiar el fondo de pantalla con un archivo por lotes, al cerrar el programa. ¿Posible?
- 25. ¿Cómo puedo hacer que salga un programa de consola C++?
- 26. Usar el botón Salir para cerrar un programa winform
- 27. ¿Cómo hacer que gdb salga si el programa tiene éxito, se rompe si el programa falla?
- 28. Espere un segundo al ejecutar el programa
- 29. ¿Cómo puedo forzar a Rails a cargar todos los modelos?
- 30. llamando al nuevo SqlConnection() bloquea el programa
se fijan los hilos como hilos de fondo? –
WPF o WinForms? – sll
@ LasseV.Karlsen: No – armin