Hallo liebes Forum,
ich habe folgendes Problem: Ich verwende Threads, und diese können in unhandled Exceptions laufen. Meine Frage nun, wie ist es möglich, dass diese Exceptions nicht meine ganze Applikation runterreissen?
Hintergrund:
Ich verwende eine von mir selbst implementierte Script-Engine, die es gestattet zur Laufzeit C# Code zu kompilieren und zur Ausführung zu bringen. Dort kann ich nicht erzwingen, dass die Thread-Methode ein Try-Catch enthält (ich habe keinen Einfluss auf den Script-Inhalt). Wenn das Script nun eine unhandled Exception erzeugt, reisst es mir die ganze Applikation runter, was gelinde gesagt suboptimal ist.
Erwünschtes Ziel:
Thread Exceptions bestimmter Threads sollten ignorierbar sein, und diese Threads sollten sich dann einfach ohne Exception Handling beenden.
Hier mal extrahierter BeispielCode:
Im Beispiel sollte dann im Idealfall folgendes ausgegeben werden:
Starting thread now...
Test!
Fetched exception in app domain unhandled exception method!
Ended regularly, yeah!
Aber die letzte Meldung kommt natürlich nie...
Für eine Lösung wäre ich extrem dankbar.
Viele Grüße
_ntr_
ich habe folgendes Problem: Ich verwende Threads, und diese können in unhandled Exceptions laufen. Meine Frage nun, wie ist es möglich, dass diese Exceptions nicht meine ganze Applikation runterreissen?
Hintergrund:
Ich verwende eine von mir selbst implementierte Script-Engine, die es gestattet zur Laufzeit C# Code zu kompilieren und zur Ausführung zu bringen. Dort kann ich nicht erzwingen, dass die Thread-Methode ein Try-Catch enthält (ich habe keinen Einfluss auf den Script-Inhalt). Wenn das Script nun eine unhandled Exception erzeugt, reisst es mir die ganze Applikation runter, was gelinde gesagt suboptimal ist.
Erwünschtes Ziel:
Thread Exceptions bestimmter Threads sollten ignorierbar sein, und diese Threads sollten sich dann einfach ohne Exception Handling beenden.
Hier mal extrahierter BeispielCode:
Code:
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace TestConsole { public class TestThreadException { public TestThreadException() { Thread.GetDomain().UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Thread thrTest = new Thread(new ThreadStart(ThreadStartMethod)); Console.WriteLine("Starting thread now..."); thrTest.Start(); Thread.Sleep(5000); Console.WriteLine("Ended regularly, yeah!"); } void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine("Fetched exception in app domain unhandled exception method!"); Console.ReadLine(); } private void ThreadStartMethod() { Console.WriteLine("Test!"); int i = 3 / Convert.ToInt32("0"); } } }
Starting thread now...
Test!
Fetched exception in app domain unhandled exception method!
Ended regularly, yeah!
Aber die letzte Meldung kommt natürlich nie...
Für eine Lösung wäre ich extrem dankbar.
Viele Grüße
_ntr_
Comment