2011-11-15 14 views
3

メインAppDomainにはいくつかの子AppDomainsがあります。子のAppDomainにはUnhandledExceptionがあります。 子AppDomainで子AppDomainをUnhandledExceptionでアンロードする方法。UnhandledExceptionでAppDomainをアンロードする方法

+2

てみてくださいあなたの質問のビュー数を改善するために使用している言語。 – LarsTech

+0

UnhandledExceptionのルートに到達しようとする方が良いでしょう。 –

+0

http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspxのドキュメントから、これは非常に乱雑な営業。具体的には、成功するとは保証されておらず、スレッドを殺す可能性があります。子のAppDomainsが非常にシンプルで予測可能でない限り、私はこれに助言しません。 –

答えて

3

これは、UnhandledExceptionイベントハンドラを登録することなく、try ... finally ...によって行うことができます。

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); 
    } 
    } 
} 

出力は次のようになります。 `C#の`や `vb.net`タグまたは任意の追加

I'm good (FooDomain) 
Error: I'm bad (FooDomain) 
関連する問題