Ich habe einen unbehandelten Ausnahme-Handler. Es zeigt eine nette GUI und ermöglicht Benutzern, einen Fehlerbericht zu senden. Benutzer können sogar ihren Namen, ihre Telefonnummer und andere Dinge hinterlassen, und unsere Support-Abteilung ruft sie zurück. Funktioniert gut, sieht gut aus, macht Kunden weniger wütend. In der Theorie sowieso.Wie suspendiere ich alle Threads, nachdem mein Programm abstürzt?
Das Problem ist, dass meine Anwendung Hintergrundthreads verwendet, und die Threads scheinen nicht zu kümmern, wenn eine Ausnahme, sagen wir, der GUI-Thread (was Sinn macht), und einfach ihre Arbeit fortsetzen. Dies führt schließlich dazu, dass ein WER-Dialog erscheint, wenn der Benutzer mein benutzerdefiniertes Exception-Handler-Fenster lange genug offen lässt, so dass es aussieht, als wäre der Fehler-Handler selbst abgestürzt.
Ich habe keinen Zugriff auf die Thread-Objekte im Bereich des Ausnahmebehandlers, so dass ich sie nicht unterbrechen kann. Das globale Zugreifen auf Thread-Objekte ist ebenfalls keine Lösung. Meine Problemumgehung für den Moment besteht darin, in meinem Exception-Handler so etwas wie Globals.Crashed = true;
zu verwenden und meine Thread-Methoden diese Eigenschaft bei jeder Schleifeniteration überprüfen zu lassen. Nicht perfekt, aber es minimiert den Schaden.
Kennt jemand eine weniger-hacky Methode? Ist meine Vorgehensweise falsch? Muss ich es wie WER machen und ein externes Programm starten, das das Hauptprogramm aussetzt und die Fehler-UI anzeigt?
Wenn dieser Trick gut genug funktioniert, würde ich dabei bleiben. – FrustratedWithFormsDesigner