2011-11-15 5 views
3

principal AppDomain ont des enfants AppDomains. Dans l'enfant AppDomain peut être UnhandledException. Comment décharger l'enfant AppDomain par UnhandledException dans l'enfant AppDomain.Comment faire pour décharger AppDomain par UnhandledException

+2

Essayez d'ajouter un '' C# ou balise 'vb.net' ou quoi que langue que vous utilisez pour améliorer le nombre de vues sur votre question. – LarsTech

+0

Vous feriez mieux d'essayer d'obtenir à la racine de la UnhandledException –

+0

De la documentation à http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx il semblerait que ce soit un entreprise très désordonnée. Plus précisément, il n'est pas garanti de réussir, pourrait tuer certains threads et pas d'autres. À moins que l'enfant AppDomains ne soit très simple et prévisible, je ne le conseillerais pas. –

Répondre

3

Cela peut se faire par try ... finally ..., sans l'enregistrement d'un gestionnaire d'événements UnhandledException:

using System; 
using System.Reflection; 

interface IFoo 
{ 
    void DoGood(); 
    void DoBad(); 
} 

class Foo : MarshalByRefObject, IFoo 
{ 
    public void DoGood() { Console.WriteLine("I'm good (" + AppDomain.CurrentDomain.FriendlyName + ")"); } 
    public void DoBad() { throw new Exception("I'm bad (" + AppDomain.CurrentDomain.FriendlyName + ")"); } 
} 

class Program 
{ 
    public static void Main() 
    { 
    try 
    { 
     AppDomain domain = AppDomain.CreateDomain("FooDomain"); 
     try 
     { 
     string assemblyName = Assembly.GetExecutingAssembly().FullName; // may be different assembly 
     string typeName = "Foo"; 
     IFoo foo = (IFoo)domain.CreateInstanceAndUnwrap(assemblyName, typeName); 
     foo.DoGood(); 
     foo.DoBad(); 
     } 
     finally 
     { 
     AppDomain.Unload(domain); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Error: " + e.Message); 
    } 
    } 
} 

La sortie est:

I'm good (FooDomain) 
Error: I'm bad (FooDomain) 
Questions connexes