2011-01-13 12 views
0

Das Problem in diesem Code ist, dass, wenn es laufen gelassen und ich schiebe Schaltfläche „Ja“, Dies zeigt:Frage zum DispatcherUnhandledException

alt text

Das bedeutet, dass meine Anwendung funktioniert nicht mehr, ich will es nur zu Ende.

private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) 
     { 
      string message = "An unhandled exception has ocurred, do you want close the app?"; 
      MessageBoxResult currentMB = MessageBox.Show(message, "SomeTitleApp", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); 

      if (currentMB == MessageBoxResult.Yes) 
      { Application.Current.Shutdown(); } 
      else 
      { e.Handled = true; } 
     } 

Antwort

2

DispatcherUnhandledException ist nicht die richtige. Das wird nur ausgelöst, wenn Code auf dem UI-Thread bomben. Sie haben wahrscheinlich etwas Kaboom auf einem Arbeitsthread oder bevor die App überhaupt gestartet wurde.

Sie müssen einen Ereignishandler für AppDomain.CurrentDomain.UnhandledException schreiben. Durch Aufruf von Environment.Exit() wird der WER-Dialog nicht mehr angezeigt. Stellen Sie sicher, dass Sie sich anmelden, niemand kümmert sich um Apps, die mit einem nachvollziehbaren Grund plötzlich aus dem Leben verschwinden. Protokollieren Sie e.ExceptionObject.ToString(), um die Ausnahmebedingungsnachricht und die Stack-Ablaufverfolgung zu erhalten. Oft genug, um das Problem zu diagnostizieren.

+0

Environment.Exit (0) funktioniert, haben Sie einen Kommentar zu Application.Current.Shutdown()? Warum hat es versagt? –

+0

Das ist die freundliche Art, eine App herunterzufahren, jemand kann das Exit-Ereignis verbinden und es abbrechen. Dies ist * Weg * über freundlich oder Abbrechen, Ihre App ist tot ohne eine Möglichkeit, es wieder zu beleben. Es erlitt einen Herzinfarkt. Das Anwenden der Paddles funktioniert nur in einer TV-Show. –

1

MSDN sagt: Diese Methode wird nur von dem Thread aufgerufen werden kann, die das Anwendungsobjekt erstellt. Sind Sie sicher, dass Sie das Herunterfahren vom richtigen Thread aufrufen?

+0

Ja, ich bin sicher =/ –

+0

Ich mag Han's Antwort. All unser Code behandelt sowohl die AppDomain UnHandledException als auch die DispatcherUnhandledException aus Gründen der Vollständigkeit. – Damian