Bonjour,
Je cherche à créer des sous-domaines dans une application, afin de pouvoir exécuter du code dans un espace "confiné". Je voudrais donc qu'une exception levée (et pas interceptée) dans un sous-domaine ne fasse pas planter mon application.
Cependant j'ai quelques soucis pour ne faire "planter" que le sous-domaine.
La documentation de AppDomain.UnhandledException dit :
"This event occurs only for the application domain that is created by the system when an application is started. If an application creates additional application domains, specifying a delegate for this event in those applications domains has no effect."
Visiblement, cet évenement est quand même déclenché dans un sous-domaine, par contre l'exception est propagée malgré l'interception de cet évenement, et ferme donc l'application entière.
Un exemple de code pour tester cela :
Code :
- using System;
- namespace TestAppDomain
- {
- class Program
- {
- static AppDomain domain;
- static void Main(string[] args)
- {
- domain = AppDomain.CreateDomain("child" );
- domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException);
- domain.DoCallBack(new CrossAppDomainDelegate(ChildDomainEntry));
- Console.ReadLine();
- }
- static void ChildDomainEntry()
- {
- new System.Threading.Thread(new System.Threading.ThreadStart(Boom)).Start();
- }
- static void Boom()
- {
- throw new Exception();
- }
- static void domain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
- {
- Console.WriteLine("AppDomain = " + AppDomain.CurrentDomain.FriendlyName);
- Console.WriteLine(e.ExceptionObject.ToString());
- //AppDomain.Unload(domain);
- }
- }
- }
|
l'exception est bien écrite à la console, puis l'application est fermée.
Comment faire en sorte de ne faire fermer que le domaine fils, et pas l'application entière ?
Merci de vos réponses
---------------
-( BlackGoddess )-