Frage

Alle von uns die Try-Catch-Blöcke verwenden. Aber was ist der beste Weg, um Fehler in benutzerdefinierten Funktionen der Handhabung?

Zeigen Sie ein messagebox an den Benutzer, wenn die Ausnahme ausgelöst wird (wenn möglich innerhalb der Funktion) oder einen Wert zurückgeben anzeigt, dass ein Fehler in der Funktion gefunden wurde?

War es hilfreich?

Lösung

Es hängt wirklich von der Funktion, aber im Allgemeinen würde ich empfehlen dagegen eine MessageBox des Benutzer anzuzeigen ist; Dies ist eine Aufgabe für die Benutzeroberfläche. Wenn die Funktion (aus einem berechtigten Grund) hat eine MessageBox zeigen, eine Überlastung sorgen, die als „stille“ gewährleistet ist, so dass ein Anrufer der Funktion der MessageBox verhindern kann. Aber, wie gesagt, ich glaube, es ist besser, der Anrufer entscheiden zu lassen, wie die Ausnahme zu behandeln. Schließlich kann es sein, dass die Funktion von Windows-Dienst aufgerufen wird, in dem keine UI ist.

ich in der Regel eine dieser Ansätze verwenden:

  • und gar nicht die Ausnahme abfangen, aber es eher Blase lassen nach oben. Dies geschieht, indem man einfach keinen try-catch-Block in der Funktion zu implementieren.
  • Fangen Sie die Ausnahme, tun Sie etwas mit ihm (wie es der Anmeldung), und dann wieder werfen es.
  • Fangen Sie die Ausnahme, wickeln Sie es (als Innerexception) in einer neuen Ausnahme, die ausgelöst wird, möglicherweise mit einer gewissen Protokollierung erfolgen.

Dies gilt, wenn die Funktion selbst kann nicht die Ausnahme behandeln. In einigen Fällen kann es sein, dass die Funktion den Ausnahmezustand umgehen kann und immer noch ihre Arbeit verrichten. In diesen Fällen wird natürlich keine Ausnahme von der Funktion geworfen werden.

Andere Tipps

ich alle meine Fehler Blase lassen auf der obersten Ebene, wo ich eine Anwendung Fehlerbehandlung verwenden, um sie alle zu behandeln.

Wenn ich einen bestimmten Fehler, die ich weiß, in einer Funktion passieren kann, und diese Funktion kann damit umgehen, dann tue ich das.

Timeouts, Objekt Refs nicht gesetzt etc nach oben Handler nach oben.

Sie nicht eine Ausnahme fangen, die Sie nicht etwas tun können. Code, der mit try / catch-Blöcke ist schwierig zu lesen, und bedeutet, dass Ihre Ausnahmebehandlung Code enthalten ist, nicht für eine einfache Wartung an einem Ort ist übersät.

Wenn Sie nur die Ausnahme protokollieren oder die Benutzer alarmieren, sollte dies an der Spitze des Stapels durchgeführt werden (oder bei der Anwendung Schichtgrenzen). Verwenden Sie das Application.ThreadException Ereignis und das AppDomain.CurrentDomain.UnhandledException Ereignis und haken Sie sie in Ihrem Sub Main Methode, um Event-Handler auf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top