2009-06-26 5 views
4

Grundsätzlich, von dem, was ich verstanden habe, von dem kleinen, das ich im Internet gesucht habe, können Threads zwischen AppDomains übergeben werden. Jetzt habe ich den folgenden Code geschrieben:AppDomain und threading

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

Dies funktioniert gut, und alles ist in Ort klicken ... Der Haupt-Thread geht in die neue Version meines Programms durch und startet durch den Hauptkörper. Meine Frage ist, wie würde ich gehen, um es wieder zu dem Elternteil AppDomain gehen? Ist das möglich? Ich versuche, eine Instanz einer Klasse zwischen den beiden Domänen zu teilen.

Antwort

8

Sie können Instanzen von Klassen nicht direkt zwischen AppDomain s teilen. Um dies zu tun, sollten Sie die Klasse von MarshalByRefObject ableiten und Remoting verwenden, um auf die Instanz von der anderen AppDomain zuzugreifen.

+0

Alle Hinweise auf gute Ressourcen, wie Remoting zu tun? –

+0

Nichts besser als MSDN: http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx Dieser Forenbeitrag enthält ein relevantes Codebeispiel: http://social.msdn.microsoft.com/Foren/de-DE/netfxremoting/thread/e2dc5846-ded5-4c01-acd1-2ac5f3285ec3 –

1

Ein Objekt in .Net kann nur in einer AppDomain existieren. Es ist nicht möglich in 2 AppDomains gleichzeitig zu existieren.

Sie können jedoch .Net Remoting verwenden, um einen Proxy eines .Net-Objekts in mehrere AppDomains gleichzeitig zu übertragen. Dadurch wird Ihr Objekt in mehreren Domänen angezeigt. Ich glaube, das ist es wonach Sie suchen.

Es gibt viele Tutorials online verfügbar. Google für ".Net Remoting Tutorial" und das bringt Sie auf den richtigen Weg.