2009-06-26 66 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?這可能嗎?我想要實現的是在兩個域之間共享一個類的實例。

回答

8

您不能在AppDomain之間直接共享類的實例。爲此,您應該從MarshalByRefObject中派生類,並使用遠程訪問從其他AppDomain訪問該實例。

+0

任何指針,以良好的資源就怎麼做遠程處理? – 2009-06-26 12:50:59

1

.Net中的對象只能存在於一個AppDomain中。它不可能同時存在於兩個AppDomain中。

但是,您可以使用.Net Remoting將.Net對象的代理一次推送到多個AppDomain中。這會讓你的對象出現在多個域中。我相信這是你正在尋找的。

網上有很多教程。谷歌的「。Remoting教程」,這將讓你在正確的軌道上。