Beenden der Anwendung nach Ausnahme-Wie?

Asterix15

Grünschnabel
Hallo Programmierer,
ich habe eine Anwendung geschrieben und möchte jetzt eine korrekte Fehlerbehandlung dafür. Wenn eine Ausnahme ausgelöst wird, soll eine entsprechende Fehlermeldung ausgegeben und die Anwendung beendet werden (mit try-catch, usw.).
Das Problem ist die Beendigung des Programms. Wenn ich ein Windows-Form habe, wende ich einfach die Methode dispose() über me.dispose() aus, und die Anwendung wird beendet. Tritt die Ausnahme aber in einer normalen, von mir erstellten Klasse auf, gibt es diese Methode natürlich nicht. D.h. die Anwendung gibt die Fehlermeldung aus und arbeitet dann aber nach dem catch weiter die nachfolgenden Funktionen ab und löst Folge-Ausnahmen aus. Wie kann ich die Prozessierung an dieser Stelle abbrechen?Jede Hilfe ist willkommen!
Danke im Voraus,
Asterix
 
Hallo,

ich versuche dir mal ein paar hoffentlich nützliche tipps zu gehen. Also ich gehe einfach mit "End" aus meinem Programm. Das schaut dann zum Beispiel so aus
Code:
Public Sub Cancel()
   'zusätzliche Abfrage ob es wirklich Beendet werden soll
   Dim x As MsgBoxResult
   x = MsgBox("Would you like to cancel ?", MsgBoxStyle.YesNo, "Cancel")
   If x = MsgBoxResult.Yes Then
      End
   End If
End Sub

Es wird nur aus dem Programm gegeangen wenn der Benutzer in der msgbox auf yes klickt.

Möchte ich nur eine Schleife, Sub, usw beenden oder unterbrechen mache ich das mit"Exit Sub" oder "Exit For" oder "Exit while" je nach dem was ich beenden möchte.

Ich hoffe ich habe dir weiter geholfen

Gruß Isabelle
 
Hallo Isabell,
also erstmal Kompliment für die Geschwindigkeit, mit der du geantwortet hast- ich habe nach höchstens einer halben Stunde deine Antwort gehabt.
Ich habe das 'end' ausprobiert- funktioniert natürlich. So einfach kann die Welt sein! Du glaubst nicht, was ich alles probiert habe, bevor ich hier gepostet habe.
Also nochmal vielen Dank!
Asterix
 
Hallo,

nicht zu danken! Ist doch keine problem. hast halt gerade glück gehabt das ich online gewesen bin.

gruß isabelle
 
Hallo Zusammen,

eine VB.NET Anwendung wird immer dann beendet wenn das Hauptformular
mit Form.Close geschlossen wird.
Den End Befehl gibt es zwar aber er sollte wie auch schon bei VB Classic
gemieden werden, da VB bei diesem Befehl keinerlei Aufräumarbeiten sowie
anderen internen Code ausführt um die Anwendung SAUBER zu beenden.


End hält das Programm sofort an.
Dabei können z.B. die Ereignisse Form1_Closing etc. evtl. noch
geladener Forms nicht mehr ausgeführt werden.

Normalerweise steht in diesen Ereignisprozeduren sog. "Aufräumcode" wie z.B.
Auflösen von Verweisen auf Objekte, Schliessen von Datenbankobjekten usw.
Dieser Code würde bei Abbrechen des Programms mit End nicht mehr ausgeführt.
Die Folge davon wären möglicherweise im Speicher verbleibende Objekte, die
bis zum Ende der Systemsession Speicherplatz belegen oder bei
Datenbankprogrammen z.B. Verlust von Daten oder Beschädigungen an der
Datenbank.
Das ist nur eine kleine Auswahl evtl. schädlicher Folgen von End.


Wenn ein Programm sich nach dem Entladen der Hauptform nicht selbst sauber
beendet, dann ist das ein Hinweis auf einen Fehler im Programmcode.

Gruß
Jens
 
Um die Probleme mit End zu umgehen, die Jens schon alle aufgezählt hat, kannst du auch einfach im Catch-Block eine erneute Exception aufrufen die an die aufrufende Klasse weitergegeben wird. In der "Mutterklasse" kannst du dann mit einem erneuten Try...Catch-Block die Exception abfangen und das hauptform mit Form.Close schließen. Also z.B. so:

frmHauptform:
Code:
Private Sub frmHauptform_Load(ByVal sender As System.Object, _
 ByVal e As System.EventArgs) Handles MyBase.Load

    Dim clsKlasse as new clsKlasse1

    Try
           clsKlasse.Funktion1
    Catch ex as Exception
          MsgBox ex.Message
          Me.Close
    End Try

End Sub
clsKlasse1:
Code:
 Public Sub Funktion1()

    Try
          'Irgendwelcher Code
    Catch ex as Exception
         Throw New Exception(ex.Message)
   End Try

End Sub
Ich hoffe das ich jetzt auf die schnelle nichts vergessen habe. Bis dann...
 
Zurück