Frage

ich meine eigene Ausnahme habe, die auf bereits werfen Ausführung scheitert ein Verfahren (p / beruft, in meinem Fall).

public PInvokeException(string methodName)
: base(String.Format(CultureInfo.CurrentCulture,
"An error occured while external method '{0}' call",
methodName)) { }

Aber ich will, es ersetzen mit bereits bestehenden. Gibt es in FCL so etwas?

War es hilfreich?

Lösung

Ist Ihr Anrufer auf verschiedene Aktionen auf der Grundlage nehmen gehen, ob Sie eine PInvokeException gegen eine InvalidOperationException werfen? Wenn ja, dann erstellen Sie eine benutzerdefinierte PInvokeException. Ansonsten InvalidOperationException und eine klare Fehlermeldung verwenden.

Siehe Wie Exception Hierarchies entwerfen.

Andere Tipps

Es gibt nichts, das zu PInvoke gewidmet ist im BCL nennt. Der nächste, der existiert, ist Marshal.GetExceptionForHR und Marshal.GetHRForLastWin32Error. Sie können die Kombination dieser beiden Funktionen verwenden Sie die entsprechende Ausnahme ausgelöst, wenn ein PInvoke-Aufruf fehlschlägt.

Beispiel:

throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error());

Es gibt ein: Win32Exception .

Wenn die Methode, die Sie von einer Ausnahme werfen ist eine .NET-Methode Sie sollte , eine benutzerdefinierte Ausnahme (oder ein eine bestehenden, je nachdem, was passiert ist).

Wenn Sie eine Methode im Namen der Person nennen Aufruf Ihre Methode (oder etwas mit Reflexion zu tun - aber MethodInfo.Invoke tut es sowieso), zum Beispiel:

public void DoIt(Action action) { action(); }

Sie sollten verwenden die TargetInvocationException Ausnahme.

Wenn Sie die Ausnahme nicht verarbeiten kann, rethrow es, oder ignorieren.

Wie wäre es System.Runtime.InteropServices.ExternalException?

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