2009-06-26 18 views
4

基本的には、私がインターネット上で検索することができた小さなことを理解したことから、スレッドはAppDomains間を通過できます。今、私は次のコードを書いている:AppDomainとスレッディング

const string ChildAppDomain = "BlahBlah"; 
    static void Main() 
    { 
     if (AppDomain.CurrentDomain.FriendlyName != ChildAppDomain) 
     { 
      bool done = false; 
      while (!done) 
      { 
       AppDomain mainApp = AppDomain.CreateDomain(ChildAppDomain, null, AppDomain.CurrentDomain.SetupInformation); 
       try 
       { 
        mainApp.ExecuteAssembly(Path.GetFileName(Application.ExecutablePath)); 
       } 
       catch (Exception ex) 
       { 
        // [snip] 
       } 
       AppDomain.Unload(mainApp); 
      } 
     } 
     else 
     { 
      // [snip] Rest of the program goes here 
     } 
    } 

これは正常に動作し、すべてが所定の位置にクリックしている...メインスレッドが私のプログラムの新しいバージョンに通過すると、アプリケーション本体を通じて実行を開始します。私の質問は、どうすれば親に返却するのですか?AppDomain?これは可能ですか?私が達成しようとしているのは、2つのドメイン間でクラスのインスタンスを共有することです。

答えて

8

クラスのインスタンスを直接AppDomainの間で共有することはできません。これを行うには、クラスをMarshalByRefObjectから派生させ、remotingを使用してもう1つのAppDomainからインスタンスにアクセスする必要があります。

+0

リモート操作を行う方法についての良いリソースへの任意のポインタ? –

+0

MSDNより優れたものはありません:http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspxこのフォーラムの投稿には、関連するコードサンプルが含まれています。http://social.msdn.microsoft.com/Forums/ja-US/netfxremoting/thread/e2dc5846-ded5-4c01-acd1-2ac5f3285ec3 –

1

.NET内のオブジェクトは、1つのAppDomain内にのみ存在できます。同時に2つのAppDomainsに存在することはできません。

ただし、.Net Remotingを使用すると、.Netオブジェクトのプロキシを一度に複数のAppDomainsにプッシュできます。これにより、オブジェクトに複数のドメインが存在するように見えます。私はこれがあなたが探しているものだと信じています。

オンラインでは多くのチュートリアルがあります。 Googleは ".Net Remoting Tutorial"のために、それは正しい軌道に乗せます。