2016-04-06 12 views
1

Ich beschloss, die strikte Option auf einer meiner Anwendungen einzuschalten. Und für das Leben von mir konnte ich nicht herausfinden, wie man ein bisschen Code kompiliert. In einem Modul hatte ich dieses Stück CodeCatching unbehandelte Ausnahmen Entscheidung

Sub Main() 
     AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
    End Sub 
    Private Sub CurrentDomain_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) 
     e.ExitApplication = False 
    End Sub 

nach schaut sich um und sah einen anderen Posten darüber in den Application setzen, ich habe es durch den Umgang mit dem Fall zu arbeiten. Also aus Neugier habe ich beschlossen, die AddHandler und in derselben Klasse zu bewegen, und dann wurde klar, dass sein der gleiche Klasse Name, aber unterschiedliche Namensräume:

Partial Friend Class MyApplication 
    Private Sub MyApplication_UnhandledException(sender As Object, e As UnhandledExceptionEventArgs) Handles Me.UnhandledException 
     e.ExitApplication = False 
     AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException 
    End Sub 

    Private Sub CurrentDomain_UnhandledException(sender As Object, e As System.UnhandledExceptionEventArgs) 
     e.ExitApplication = False 
    End Sub 
End Class 

Hier ist ein Link zu beiden ist:

Also meine Frage ist, welche soll ich verwenden? Ich möchte verhindern, dass die App herunterfährt ... aber beide Optionen scheinen so zu sein, wie ich es möchte.

+0

In Ihrem zweiten Codeblock glaube ich nicht, dass Sie den 'AddHandler' innerhalb der Funktion' MyApplication_UnhandledException' wollen - das macht wenig Sinn. Es könnte funktionieren, da ich glaube, dass (VB) Handler zuerst aufgerufen wird, und der 'CurrentDomain.UnhandledException' Handler zweitens, aber es macht nicht viel Sinn. –

+1

Wenn Sie e.ExitApplication auf False setzen, wird nichts ausgeführt. Das hat vor 11 Jahren aufgehört zu arbeiten, mach dir keine Sorgen. –

+0

@StuartWhitehouse Sie haben vielleicht übersehen, dass das Problem aufkam, als ich mich streng anschaltete. Bis heute funktioniert dieser Code seit über 3 Jahren. Ehrlich gesagt bin ich überrascht, dass es jetzt funktioniert hat. Der Code, den ich oben gepostet habe, zeigt sehr deutlich den Compilerfehler und soll nicht zeigen, was ich in meiner Codebasis die ganze Zeit gehabt habe ... Ich bin nicht wütend oder irgendetwas (trotz wie das liest) ist es nur das hier und In der Antwort wurde erwähnt, dass der Code, den ich zeige, funktioniert. : DI wissen, der Compiler sagte mir auch –

Antwort

1

Die System.UnhandledException nicht über ein ExitApplication Mitglied (siehe die Dokumentation Sie verbunden sind), so nicht verwendet werden kann, die Anwendung beenden zu stoppen - sobald dies die Anwendung beendet wird immer aufgerufen wird. Im Allgemeinen sind die Microsoft.VisualBasic Namespace Helfer für VB, die mehr oder weniger doppelte Funktionalität an anderer Stelle verfügbar ist. Die nächste Entsprechung zu dem VisualBasic-Handler, den Sie erwähnen, ist stattdessen der Application.ThreadException. Dies und die AppDomain.CurrentDomain.UnhandledException sind beide sehr gut in der MS docs beschrieben.

Um zu verhindern, dass die App geschlossen wird, kann entweder die VisualBasic eine oder die ThreadException verwendet werden. Ich habe die Microsoft.VisualBasic in der Vergangenheit verwendet, um etwas ähnliches zu erreichen, was Sie tun.

+0

yeah, ich weiß, dass 'System.UnhandledExceptionEventArgs' nicht enthält' ExitApplication' Der Code, den ich zu ApplicationEvents verschoben wurde, war nur AddHandler, als ich VisualStudio sagte, um die Sub für mich hinzuzufügen vorangestellt 'System.' und das ist, wenn ich die zwei verschiedenen Versionen von UnhandledExceptionEventArgs bemerkte. Zeigt das Problem mit dem Kopieren von Code an, ohne zu wissen, was es tut: D –

Verwandte Themen