Hallo!
Ich habe in der MSDN folgenden Abschnitt in der Beschreibung zur StackOverflowException gefunden:
Beachten Sie, dass eine Anwendung, die als Host für die Common Language Runtime (CLR) dient, festlegen kann, dass die CLR die Anwendungsdomäne, in der die Stapelüberlaufausnahme auftritt, entladen und den zugehörigen Prozess fortführen kann. Weitere Informationen finden Sie unter ICLRPolicyManager und Bereitstellen der Common Language Runtime.
Wie funktioniert das? Ich habe in meinem Programm mal eine solche Exception absichtlich auftreten lassen, um zu schauen, ob der Prozess weiter läuft und nur die Anwendungsdomäne entladen wird. Natürlich habe ich alles in eine neue AppDomain geladen. Funktioniert aber nicht. Der Prozess wird komplett beendet! Muss etwas spezielles konfiguriert werden, damit das klappt?
Hallo Sascha,
das hab ich in meiner MSDN zu einer StackOverFlowException gefunden:
In prior versions of the .NET Framework, your application could catch a StackOverflowException object (for example, to recover from unbounded recursion). However, that practice is currently discouraged because significant additional code is required to reliably catch a stack overflow exception and continue program execution.
Starting with the .NET Framework version 2.0, a StackOverflowException object cannot be caught by a try-catch block and the corresponding process is terminated by default. Consequently, users are advised to write their code to detect and prevent a stack overflow. For example, if your application depends on recursion use a counter or a state condition to terminate the recursive loop.
ich hoffe mal das erklärt (vor allem der zweite abschnitt 😉 ) warum der prozess beendet wird.
btw. wo hast du die beschreibung her, die du gepostet hast ?!
in meiner (englischen) version hier kann ich nichts dergleichen finden....
the corresponding process is terminated by default
Da ist das "by default" sehr interessant. Wenn der Prozess per default beendet wird, heisst das im Umkehrschluss, dass man irgendwo einstellen kann, dass er das eben nicht tut.
Kurzes Eintragen von ICLRPolicyManager in die Suchbox auf der MSDN-Seite führte mich zu:
Keep Your Code Running with the Reliability Features of the .NET Framework - CLR Hosts and Escalation Policies sowie
ICLRPolicyManager
@Nils
Habe ich hier gefunden:
http://msdn2.microsoft.com/de-de/library/system.stackoverflowexception(VS.80).aspx
Eigentlich habe ich nur den zweiten Absatz gepostet, von dem was Du gepostet hast.
@Borg:
Die Seiten habe ich auch gefunden, aber wie wende ich das an?
Das ist doch jetzt aber nicht so schwer: Du hast eine COM-Komponente, die ein Interface zur Verfügung stellt. Über dieses Interface hast du Zugriff auf mehrere Methoden, mit denen du die Reaktion des Frameworks festlegen kannst.
Also wirst du wohl über COM-Interop eine Instanz dieses Interface erzeugen müssen und die Methoden wie benötigt aufrufen. Dazu gibt es allein hier im Forum schon massig Beispiele.