2009-06-26 2 views
4

기본적으로 인터넷에서 검색 할 수있는 작은 항목을 이해 했으므로 스레드는 AppDomains간에 전달할 수 있습니다. 지금, 나는 다음과 같은 코드를 작성했습니다 :AppDomain 및 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 
     } 
    } 

이 잘 작동하고 모든 것을 제자리에 클릭하면됩니다 ... 메인 스레드 내 프로그램의 새로운 버전으로 통과 및 기본 응용 프로그램 본체를 통해 실행을 시작합니다. 제 질문은 부모에게 다시 나가는 방법을 어떻게 알겠습니까? AppDomain? 이것이 가능한가? 달성하고자하는 것은 두 도메인간에 클래스의 인스턴스를 공유하는 것입니다.

답변

8

AppDomain 사이에 직접 클래스 인스턴스를 공유 할 수 없습니다. 그렇게하려면 MarshalByRefObject에서 클래스를 파생시키고 remoting을 사용하여 다른 AppDomain에서 인스턴스에 액세스해야합니다.

+0

원격 작업을 수행하는 방법에 대한 좋은 자원에 대한 모든 포인터? –

+0

MSDN보다 뛰어난 것은 없습니다 : http://msdn.microsoft.com/en-us/library/kwdt6w2k(VS.71).aspx이 포럼 게시물에는 관련 코드 샘플이 들어 있습니다. http://social.msdn.microsoft.com/포럼/ko-US/netfxremoting/thread/e2dc5846-ded5-4c01-acd1-2ac5f3285ec3 –

1

.Net의 개체는 하나의 AppDomain에만 존재할 수 있습니다. 동시에 2 개의 AppDomains에 존재하는 것은 불가능합니다.

그러나 .Net Remoting을 사용하면 .Net 개체의 프록시를 여러 AppDomains로 동시에 푸시 할 수 있습니다. 이렇게하면 개체가 여러 도메인에있는 것처럼 보입니다. 나는 이것이 당신이 찾고있는 것이라고 믿습니다.

온라인으로 제공되는 많은 자습서가 있습니다. ".Net Remoting Tutorial"에 대한 Google은 올바른 길을 찾아줍니다.