2011-10-28 13 views
2

1つのアプリケーションドメインの例外が別のアプリケーションドメインに影響するのはなぜですか?子ドメインクローズプログラムで例外が発生するのはなぜですか?

プログラムの終了を防止するにはどうすればよいですか?

using System; 
using System.Reflection; 
using System.Threading; 

namespace domain 
{ 
public class Worker : MarshalByRefObject 
{ 
    public static void NotMyCodeThreadProc() 
    { 
     throw new Exception(); 
    } 

    public void NotMyCode() 
    { 
     var thread = new Thread(NotMyCodeThreadProc); 
     thread.Start(); 
     thread.Join(); 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     AppDomain ad = AppDomain.CreateDomain("New domain"); 
     Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "domain.Worker"); 
     try 
     { 
      remoteWorker.NotMyCode(); 
     } 
     catch 
     { 
     } 
     Console.WriteLine("!"); 
     Console.ReadLine(); 
    } 
} 
} 
+1

未処理例外ポリシーを変更するには、カスタムCLRホストが必要です。 C#のコードで書くことはできません。 Google ICLRPolicyManager :: SetDefaultAction() –

答えて

0

.NET 2.0以降では、スレッド内で未処理の例外が発生すると、プロセス全体が終了します。

このポリシーを変更するには、Hansのアドバイスを参考にするか、try/catchを使用してコードを折り返して例外を処理します。

関連する問題