2011-11-15 53 views
3

主要AppDomain中有一些孩子的AppDomain。在子AppDomain中可能是UnhandledException。 如何通過UnhandledException在孩子的AppDomain卸載子的AppDomain。如何通過UnhandledException卸載的AppDomain

+2

嘗試添加'C#'或'vb.net'標籤或任何您正在使用的語言來幫助改進您的問題的查看次數。 – LarsTech

+0

你會更好試圖讓到UnhandledException –

+0

的根從文檔在http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx它似乎這是一個非常雜亂的生意。具體而言,它不保證成功,可能會殺死一些線程而不是其他線程。除非孩子的AppDomain是非常簡單的和可預見的我不會建議此。 –

回答

3

這可以通過try ... finally ...來完成,而無需註冊一個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); 
    } 
    } 
} 

的輸出是:

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