Diese Frage steht in etwa in Verbindung mit this question about exception handling. Die Problemumgehung, die ich dort gefunden habe, besteht darin, meine eigene Nachrichtenschleife zu rollen.Rolling Ihre eigene Nachrichtenschleife, irgendwelche Fallstricke?
So jetzt meine Hauptmethode sieht grundsätzlich wie folgt:
[STAThread]
static void Main() {
// this is needed so there'll actually an exception be thrown by
// Application.Run/Application.DoEvents, instead of the ThreadException
// event being raised.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form form = new MainForm();
form.Show();
// the loop is here to keep app running if non-fatal exception is caught.
do {
try {
Application.DoEvents();
Thread.Sleep(100);
}
catch (Exception ex) {
ExceptionHandler.ConsumeException(ex);
}
}
while (!form.IsDisposed);
}
Was ich aber frage mich, dies eine sichere/anständige Art und Weise ist es, die typischere ‚Application.Run (neue Mainform zu ersetzen ()), ob es für die Ausnahmebehandlung oder für was auch immer verwendet wird, oder sollte ich immer bei der Verwendung von Application.Run bleiben?
Auf einer anderen Anwendung, die jetzt ein ähnlicher Ansatz bei der Prüfung ist für beide Laden (Begrüßungsbildschirm) und die Ausnahmebehandlung verwendet wird, und ich glaube nicht, dass irgendwelche Probleme verursacht hat (noch :-))
Es scheint kein WaitMessage-Äquivalent in .NET zu geben, und die Verwendung von P/Invoke nur für eine Meldungsschleife scheint etwas zu bedeuten. (Nicht, dass es schwer ist, aber es kann nicht so sein ..) Auch habe ich keine andere Lösung für meine andere Frage (siehe Link in dieser Frage), also warum ist es sinnlos? : p – Tobi
Verzeihen Sie mich, aber wenn Sie denken, Pin-Invoke ist zu viel beteiligt sollten Sie wieder darüber nachdenken, zu versuchen, benutzerdefinierte Nachrichtenschleife zu schreiben. In Bezug auf Ihre andere Frage, wenn Sie aus irgendeinem Grund Ausnahmen im _unhandled_ Ausnahmeereignis behandeln möchten, seien Sie auf einige Hacks vorbereitet. – ima
Meiner Erfahrung nach ist ein anständiges Highlevel-Exception-Handling immer ein großer Hack und ich möchte es so gut wie möglich erledigen. Nur die innerste Ausnahme in der Debug/Log-Ausgabe zu bekommen, ist KEINE Option, und Copy Pasting try catch Blöcke in allen Event-Handlern ist auch nicht ... – Tobi