Ich baue ein System auf, das Echtzeit-Datenströme verwendet und daher mit Fehlern umgehen muss, die auftreten können, wenn alles andere so gut wie im Leerlauf ist. Die API, die ich verwende, gibt die Fehler über eine Methode namens "error" mit der angehängten Ausnahme an das Programm zurück. Diese Methode könnte dann den Fehler auslösen, aber das ist problematisch, weil ich nicht sehen kann, wie es eine gute Idee ist, mein ganzes Programm in einen try-catch-Block zu packen.
Um das Problem zu umgehen, werde ich einen Event-Handler einrichten, der das Ereignis im Hauptteil meines Programms auslöst, das dann mit dem Fehler umgehen kann, der zu diesem Zeitpunkt ausgelöst wird.
Zum Beispiel:
In der Hauptklasse:
private void Error(object sender, EventArgs e) {
Exception ex = sender as Exception;
Console.WriteLine("Error: " + ex); // Or whatever you want to do with the exception
// You could even add this if you want to then use the try -catch sequence (which
// makes the exception easier to parse and also enables you to stop the program
// with unhandled exceptions if it's something catastrophic:
try {
throw ex;
} catch (put.your.exception.detail.here) {
// do stuff
} finally {
// do other stuff
}
}
(In der Klasse, die den Fehler von der API erhält):
class Foo {
public event EventHandler ThrowError;
protected virtual void OnError(Object src, EventArgs e) {
if (ThrowError != null) {
ThrowError(src, e);
}
}
private virtual void error(Exception e) {
OnError(e, EventArgs.Empty);
}
}