2017-01-05 2 views
1

AFAIK, 모든 Windows Forms 응용 프로그램은 Main() 메서드보다 위에 [STAThread] 지시문을 설정해야합니다.Windows 용 STAThread 요구 사항 양식

그러나 예외가 있습니다. 우리는 Compact Framework를 사용하여 Windows Mobile 장치 용 응용 프로그램을 작성하고 있습니다. Compact 프레임 워크는 [STAThread] 지시문을 지원하지도 않으며 [MTAThread] 만 있습니다. 아직도, 거기에 어떤 문제도 발생하지 않았다.

이제 1 단계로 나아가려면 전체 프레임 시스템에서 Compact Framework 응용 프로그램을 실행할 수도 있습니다. 나는이 경우 .NET 프레임 워크 전체가 사용된다고 생각한다.

이 시점에서 우리는 MTA 아파트 상태의 코드를 실행하고 있습니다.이 코드는 창문 형태로 창문을 사용합니다. 컴팩트 한 프레임 워크 응용 프로그램이 완전한 창 운영 체제에서 실행되는 경우 이것은 이라는 질문으로 이어지며, 왜 부족한 [STAThread] 지시문에 대해 불만을 제기하지 않습니까?

답변

1

This Answer 당으로 나는 일반 기계하지만 일부에서 실행되고 있지 실제로 윈도우 폼을 말하고 싶지만. 물론 프록시 일종의 일도 있고 프레임 워크가 STA 스레드를 부트 스트랩 (bootstrapping)하고 앞뒤로 마샬링 (marshalling)하는 일도있을 수 있습니다.

특히 This Question에 코멘트 :

간단한 CF 응용 프로그램은 바탕 화면에서 수정없이 실행됩니다,이 잘 알려져있다. 하지만 CF 전용 API (예 : aygshell 관련)를 사용하는 앱은 실행되지 않습니다. STAThread 컴파일 옵션은 컴파일시에만 사용할 수 있습니다 (AFAIK). 그 옵션으로 DLL을 컴파일했다면 데스크톱에서 실행되지 않을 것이라고 상상할 수 있습니다. 웹 브라우저 구성 요소의 경우 코드를 하드 코드하지 않고 코드 내에서로드 한 다음 전체 프레임 워크 하나 또는 CF 하나를로드해야합니다. CF 양식은 MTA에 하드 코드됩니다. STA가 필요한 COM이로드되면 예외가 발생합니다. 조세프으로

는, 컴팩트 프레임 워크 형태 행복하게 MTA에서 함께 런들,하지만 당신은 가 STA를 필요로하지 윈폼에서 COM 기반 구성 요소를 사용하여 즉시 흥분 것을 나타내는 것으로 보인다.

+2

https://social.msdn.microsoft.com/Forums/en-US/d5b637f4-56f6-417a-a004-851c8e7ca01f/stathread-can-not-be-found-but-where-is-it? forum = netfxcompact "아니요, NETCF에는 이러한 속성이 없으므로 STA 동작을 강제 수행 할 수 없습니다. MTA가 유일하게 지원되는 모드이며 일반적으로 NETCF에 STA가 필요하지 않습니다." – josef