c# how to catch exception und die Ausführung fortsetzen
Guten Tag!
Schreibe ich einfach console-Programm. Es haben func Main () und class Adapter;
einige einfache code, der erklärt, wie es funktioniert:
void Main()
{
try
{
Work(array);
//subcribing at some events;
Application.Run();
}
catch(Exception ex)
{
//write to log;
}
}
class Adapter
{
....
public void GetSomething()
{
try
{
...some work and exception goes here;
}
catch(Exception ex)
{
//catch exception and do Work:
Work(array);
}
}
}
Als Ausnahme geht - es fängt an GetSomething. So,ich Schreibe einige Werte.Aber ich brauche, dass das Programm noch läuft, nachdem Ausnahme.
Aber nach dem Fang in GetSomething-Methode geht es zur Exception ex am Main func-und Programm-Ausgänge;
Wie man das Programm noch läuft nach dem catch exception in GetSomething-Methode?
Danke!
- das Programm läuft noch immer...
- Es sei denn, Sie erneut ausgelöst; diese Ausnahme wurde behandelt. Dein problem liegt woanders
- Ich glaube nicht, dass das Programm beendet wird, wie Sie denken, es ist.
- vielleicht sollte man mit boolean oder int in der Ausnahme und bewegen Sie den
Work(array)
Methode außerhalb der dort ändern Sie die Signatur zur Rückgabe eines boolean oder int und dann, nachdem es läuft, überprüfen Sie den Wert..wenn es stimmt..dann wieder oder wenn int = einige Wert > 0, dann wieder.. macht das da..? und wennWork
ist Methode was bedeutet es Aussehen..? zeigen Sie, dass code bitte - Aufruf
Work()
aus dem inneren der exception-handler ist wahrscheinlich eine sehr schlechte Idee. Exception handling blocks sollte nur die Ausnahme behandelt wird, sollte Sie nicht führen Sie business-Logik in Reaktion auf den Zustand der Ausnahme. Betrachten Sie, was passieren würde, wenn eine andere exception geworfen wird in einer Ausnahmebehandlung, bevor der code vollständig verarbeitet es, die original-exception verloren. Nur Griff die Ausnahme in dercatch
block, nicht behandeln es wie einelse
Anweisung für die weitere Geschäftstätigkeit. - "Nur behandeln der Ausnahme im catch-block, nicht behandeln Sie wie eine else-Anweisung für eine weitere business-Operationen".Was meinst du? Was soll ich tun?Gerade melden Sie es? Aber ich brauche einige Geschäfte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das, was Sie wollen, ist zu fangen Sie eine Ausnahme, und weiter die Ausführung am point-of-failure (das können auch mehrere Schichten nach unten im Aufruf-stack) und möglicherweise wiederholen die fehlgeschlagene Anweisung, sind Sie ziemlich viel Pech.
Einmal Ihre
catch
- Klausel aufgerufen wird, wird der Stapel wurde abgespult und bis zu diesem Punkt. Können Sie Angebot, mit Ausnahme in gewisser Weise, und dann wählen Sie "null" oder einethrow ;
throw e;
throw new SomeException();
Wenn nicht, wählen Sie eine der oben genannten, wird die Ausführung fortgesetzt, an der Stelle, nach der
try/catch/finally
block. Zum Beispiel:Wenn Sie nicht eine der oben genannten Ausführung wird mit der Anweisung nach der
try/catch/finally
block.Die besten, die Sie tun können, soweit wiederholt, ist so etwas wie dieses:
Dieses Verhalten ist nicht möglich .NET. Wenn eine Ausnahme geworfen wird, die Steuerung beendet den aktuellen Punkt und setzt auf die ersten
catch
- Anweisung, die es finden kann in der Aufruf-stack, oder beendet das Programm, wodurch die Ausführung des call-stack bis zu diesem Punkt. Das ist Teil der definition von außergewöhnlichen Verhalten.Können Sie stattdessen brechen Sie den Vorgang durch
Work
- und Prozess-jedes Element ein zu einer Zeit zu ermöglichen, den gleichen Effekt wie das, was Sie gefragt haben. In anderen Worten, anstattWork(array)
versuchenKönnen Sie try -, catch-und finally:
http://www.dotnetperls.com/finally
http://msdn.microsoft.com/es-es/library/dszsf989.aspx