vb.net UnhandledException Handler für jede einzelne Form

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ClonkAndre.

    vb.net UnhandledException Handler für jede einzelne Form

    Hallo liebe Community!

    Ich würde sehr gerne für jede meiner Form(en) in meinem Projekt einen eigenen UnhandledException Handler hinzufügen,
    nun stellt sich die Frage: "Warum benutzt du nicht einfach den UnhandledException Handler in den Application Events?" ganz einfach: Ich benutze ihn zwar aber dieser soll nur für kritische Fehler benutzt werden also d.h. jede Form bekommt einen eigenen
    hier mal mein Code:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf Program_UnhandledExceptionHandler
    3. End Sub


    Und dieser Code führt zu meinem "Program_UnhandledExceptionHandler" Module:

    VB.NET-Quellcode

    1. Public Sub Program_UnhandledExceptionHandler(ByVal sender As Object, ByVal args As UnhandledExceptionEventArgs)
    2. Dim ERRORTYPE As String = CType(args.ExceptionObject, Exception).Message
    3. Dim error_num As Integer = CType(args.ExceptionObject, Exception).HResult
    4. 'Show Error Form
    5. Dim errorfrm = New app_error_form(app_error_form.Modis.Beenden, "", "")
    6. End Sub


    Mein Sinn ist dahinter, das ich Fehler unterscheiden möchte damit meine ich: Wenn ein Fehler in der Hauptform auftritt benutzt es den Application Event Handler. Und wenn ein Fehler in anderen Formen (also keine Hauptformen) auftritt, benutzt es halt den von Module.

    Es wäre wirklich schön wenn ich dies zum laufen bekommen würde.
    LG Andre.
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    :!: EDIT::

    Habe hier schonmal herausgefunden wie man die sub im Module richtig schreibt:

    VB.NET-Quellcode

    1. Public Sub Program_UnhandledExceptionHandler(ByVal sender As Object, ByVal args As - - - - - - > System.Threading.ThreadExceptionEventArgs < - - - - - - )
    2. Dim ERRORTYPE As String = args.Exception.Message
    3. Dim error_num As Integer = args.Exception.HResult
    4. 'Show Error Form
    5. Dim errorfrm As New app_error_form(app_error_form.Modis.Beenden, "", "")
    6. errorfrm.Show()
    7. End Sub


    und hier richtig aufruft:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. AddHandler Application.ThreadException, AddressOf Program_UnhandledExceptionHandler
    3. End Sub


    Doch nun habe ich ein weiteres Problem undzwar: Wie finde ich heraus von welcher Form der Fehler kommt?
    Habe folgendes versucht: (geht aber nicht)

    VB.NET-Quellcode

    1. Public Sub Program_UnhandledExceptionHandler(ByVal sender As Object, ByVal args As - - - - - - > System.Threading.ThreadExceptionEventArgs < - - - - - - )
    2. Dim ERRORTYPE As String = args.Exception.Message
    3. Dim error_num As Integer = args.Exception.HResult
    4. 'get Form
    5. dim frm as form = directcast(sender, form) (funktioniert nicht)
    6. dim frm as Threading.Thread = directcast(sender, Threading.Thread) (funktioniert nicht)
    7. 'Show Error Form
    8. Dim errorfrm As New app_error_form(app_error_form.Modis.Beenden, "", "")
    9. errorfrm.Show()
    10. End Sub
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ClonkAndre“ () aus folgendem Grund: Code verbessert und neue Frage

    Joa, aber wie finde ich genau raus von welcher Form der Fehler kam?
    Also, in der StackTrace-Property steht der Name drinne und, ich könnte ihn ja splitten aber der WErt verändert sich natürlich immer. Wie soll man vorgehen?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!
    Hmm... Man könnte es testen aber die Werte ändern sich doch vom Namen oder von der länge her?
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!

    Herausgefunden!

    Habe es herausgefunden :D
    Für alle suchenden:

    VB.NET-Quellcode

    1. Dim frm_name As String = args.Exception.TargetSite.ReflectedType.Name


    Trotzdem danke!
    Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button :thumbup:

    Für VB.NET Entwickler: Option Strict On nicht vergessen!