Liste der Ausnahmen, die NICHT in .NET gefangen werden können

8

Was ist die Liste der Ausnahmen, die NICHT in .NET gefangen werden können? Oder wo finde ich eine solche Liste?

    
Denis 12.09.2011, 19:14
quelle

7 Antworten

22

Die einzige Ausnahme, die nicht direkt erfasst werden kann, ist (ein Framework ausgelöst) StackOverflowException . Dies ist logisch, da Sie nicht über den Speicherplatz im Stapel verfügen, um die Ausnahme an diesem Punkt zu behandeln. Aus der Dokumentation:

  

Ab Version 2.0 von .NET Framework kann ein StackOverflowException-Objekt nicht von einem try-catch-Block abgefangen werden und der entsprechende Prozess wird standardmäßig beendet.

ThreadAbortException kann abgefangen werden, wird aber immer wieder ausgelöst, So hat einzigartiges Verhalten. Aus der Dokumentation:

  

ThreadAbortException ist eine spezielle Ausnahme, die abgefangen werden kann, aber am Ende des catch-Blocks automatisch wieder ausgelöst wird.

Beachten Sie auch, dass einige AccessViolationException -Instanzen korrupte Statusausnahmen sind und nicht standardmäßig behandelt werden . Diese können behandelt werden, erfordern jedoch eine zusätzliche Handhabung über Attribute. Weitere Informationen finden Sie unter Umgang mit beschädigten Ausnahmezuständen .

    
Reed Copsey 12.09.2011, 19:18
quelle
5

NullReferenceException kann sicherlich gefangen werden. Woher hast du die Idee?

A try {} catch {} fängt sowohl nicht gemanagte als auch gemanagte Ausnahmen ab (beachten Sie, dass es für die catch keine Ausnahmeklausel gibt).

Der einzige, der nicht gefangen werden kann, ist StackOverflowException , und TreadAbortException wird am Ende des Catch erneut aufgetaut.

    
Oded 12.09.2011 19:17
quelle
3

ThreadAbortException

Hinweis:

  

ThreadAbortException ist eine spezielle Ausnahme, die gefangen werden kann, aber es   wird am Ende des Catch-Blocks automatisch wieder ausgelöst. Wann   Diese Ausnahme wird ausgelöst. Die Laufzeitumgebung führt alle finally-Blöcke aus   bevor der Thread beendet wird.

    
SwDevMan81 12.09.2011 19:17
quelle
3

Nun gibt es einige Ausnahmen, die immer neu geworfen werden, auch wenn Sie sie fangen. StackOverflowException ist die einzige, an die ich mir denken kann. möglicherweise ThreadAbortedException .

    
aL3891 12.09.2011 19:18
quelle
0

Jede Ausnahme, die aufgrund der Barrierefreiheit nicht nach Typ referenziert werden kann, kann nicht explizit abgefangen werden. Sie kann jedoch mit dem Basiscode Exception abgefangen werden.

Zum Beispiel wird ein ContractException im Code Contracts Framework absichtlich zu seiner Assembly internal gemacht, so dass Sie nicht versuchen können, es explizit abzufangen.

    
Jay 12.09.2011 19:20
quelle
0

Ich weiß nicht, warum du NullReferenceExceptions erwähnt hast. NullReferenceExceptions sind eine der wichtigsten Ausnahmen, die ich erhalte. Der einzige, den ich mir von Kopf bis Fuß denken kann, ist eine Out of Memory-Ausnahme oder StackOverflow , denn sobald der Speicher voll ist, wird die Ausführung gestoppt und es besteht eine gute Chance, dass die Exception es kann nicht erwischt werden.

    
stephenbayer 12.09.2011 19:18
quelle
0

SEHException kann in einigen Fällen nicht abgefangen werden. Es kann durch nicht verwalteten Code ausgelöst werden. Ein großer SO-Thread zu diesem Thema erscheint hier: SEHException wird nicht von Try / Catch abgefangen

    
sevzas 13.10.2014 13:49
quelle

Tags und Links