2011-09-02 5 views
3

이것은 내 메인 메소드의 일부입니다.C# 응용 프로그램이 다중 스레드 아파트에서 실행되는 이유는 무엇입니까?

[STAThread] 
static void Main(string[] args) 
{ 
    #if !DEBUG 
    try 
    { 
    #endif 
    ApartmentState aps = System.Threading.Thread.CurrentThread.GetApartmentState(); 
    //System.Threading.Thread.CurrentThread.SetApartmentState(ApartmentState.STA); 
    MessageBox.Show(aps.ToString()); 

메시지에 MTA이 표시됩니다. 왜 또는 어디에서 조사를 시작해야하는가?

답변

2

궁금한 점이 있었습니까? 아니면 다른 문제가 있었습니까? 일반적으로 주 방식에서 몇 가지 유형의 COM 상호 작용을 시도하는 경우에만 문제가됩니다. Windows는 여전히 적절한 ApartmentState에서 실행됩니다.

최근에 확인하지는 않았지만 속성에 관계없이 Visual Studio는 MTA를 사용했습니다. Visual Studio 외부에서 응용 프로그램을 실행하려고 시도 했습니까?

디버거에만 문제가있는 경우 프로젝트 속성의 디버그 섹션에서 "Visual Studio 호스팅 프로세스 사용"의 선택을 취소하십시오.

+0

AxWebBrowser에 문제가 발생했습니다. – Ahmet

+0

예, 여기 있습니다. 이제 릴리스 모드에서 STA를 실행합니다. 감사! – Ahmet

+0

기꺼이 도와 드리겠습니다. 호기심에서 벗어난이 프로젝트를 새로운 프로젝트로 만들거나 이전 버전의 Visual Studio에서 변환 했습니까? –

1

이 특성은 응용 프로그램의 COM 스레딩 모델을 설정합니다. 응용 프로그램이 COM interop을 사용하지 않는 경우 아무런 효과가 없습니다. MSDN에서

,

COM 스레딩 모델은 COM 상호 운용성을 사용하는 응용 프로그램에 관련된. COM interop을 사용하지 않는 응용 프로그램에서이 특성을 사용해도 아무 효과가 없습니다.

+1

음, 응용 프로그램 측면에서 유용한 효과는 없지만 스레드는 여전히 지정한 아파트 상태 여야합니다. –

관련 문제