Tengo un controlador de excepción no controlada. Muestra una buena GUI y permite a los usuarios enviar un informe de error. Los usuarios pueden incluso dejar su nombre y número de teléfono y cosas, y nuestro departamento de soporte los devuelve. Funciona bien, se ve bien, enoja menos a los clientes. En teoría, de todos modos.¿Cómo suspender todos los hilos después de que se cuelgue mi programa?
El problema es que mi aplicación utiliza hilos de fondo, y a los hilos no parece importarles si se lanzó una excepción, por ejemplo, el hilo de la GUI (lo cual tiene sentido), y simplemente continúan su trabajo. Con el tiempo, esto da como resultado que aparezca un cuadro de diálogo WER si el usuario deja que la ventana del controlador de excepciones personalizado permanezca abierta el tiempo suficiente, lo que hace que parezca que el controlador de errores se bloqueó.
No tengo acceso a los objetos de subprocesos en el ámbito del controlador de excepción, por lo que no puedo suspenderlos. Hacer que los objetos de subprocesos sean accesibles globalmente tampoco es una solución. Mi solución por ahora es usar algo como Globals.Crashed = true;
en mi controlador de excepciones, y hacer que mis métodos de hilos comprueben esa propiedad en cada iteración de bucle. No es perfecto, pero minimiza el daño.
¿Alguien conoce un método menos hacky? ¿Mi enfoque es incorrecto? ¿Tengo que hacerlo como lo hace WER e iniciar un programa externo que suspende el programa principal y muestra la IU de error?
Si ese truco funciona lo suficientemente bien, me quedaré con él. – FrustratedWithFormsDesigner