2009-06-26 65 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教程”,这将让你在正确的轨道上。