2009-03-23 4 views
2

MSDN에서 인용 : http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx응용 프로그램 도메인과 스레드

하나 이상의 관리 스레드 ( System.Threading.Thread으로 표시) 같은 내 도메인을 하나에서 실행하거나 응용 프로그램의 수 있습니다 관리 프로세스입니다. 각 응용 프로그램 도메인은 하나의 스레드로 시작되지만 해당 응용 프로그램의 코드 은 개의 응용 프로그램 도메인과 추가로 스레드를 생성 할 수 있습니다. 결과적으로 관리되는 스레드는 동일한 내부의 응용 도메인간에 자유롭게 이동할 수 있습니다. 관리되는 프로세스; 당신은 하나의 스레드가 여러 개의 응용 프로그램 도메인 사이를 이동할 수 있습니다.

하나의 스레드를 공유하는 2 개의 응용 프로그램 도메인으로 코드를 작성하려고했습니다. 그러나 나는 포기했다. 나는 이것이 어떻게 가능한지 전혀 모른다. 이 코드 샘플을 제공해 주시겠습니까?

답변

8

이 작업은 별도의 AppDomain에서 MarshalByRef 인 개체를 만든 다음 해당 개체에 대한 메서드를 호출하여 수행 할 수 있습니다.

예를 들어 다음과 같은 클래스 정의를들 수 있습니다.

그러면이 정의를 사용하여 현재 정의 된 AppDomain을 호출 할 수 있습니다. 호출이 콘솔에 쓰는 시점에서 2 개의 AppDomains (호출 스택의 서로 다른 두 지점)에 1 개의 스레드가 있습니다. 여기에 대한 샘플 코드가 있습니다.

public static void CallIntoOtherAppDomain() 
{ 
    var domain = AppDomain.CreateDomain("Other Domain"); 
    var obj = domain.CreateInstanceAndUnwrap(typeof(Foo).Assembly.FullName, typeof(Foo).FullName); 
    var foo = (IFoo)obj; 
    foo.SomeMethod(); 
} 
+0

그래서 Thread.GetDomain()은 스레드를 만든 appdomain에 고정되어 있지 않습니다. 현재의 호출 스택을 기반으로 동적입니다 ... 아니, 이해합니다! 고마워요! –

0

다른 앱 도메인의 개체에 대한 메서드를 호출하십시오.

0

영어가 제 첫 번째 언어가 아니기 때문에 가능하지만 문서가 다소 혼란 스럽습니다.

새 AppDomains를 만들 때 명확하게하기 위해 추가 스레드를 얻지 못합니다. MarshalByRef 프록시를 통해 메소드를 호출하면 추가 스레드를 직접 작성하지 않는 한 주 스레드를 통해 수행됩니다.

e.e. 추가 AppDomains를 만들 때 기본 동작은 다른 AppDomains간에 하나의 스레드가 공유된다는 것입니다.

+0

왜 이것이 그렇게 보이는지 모르겠지만 그렇게 보입니다 ... –

관련 문제