2017-01-04 1 views
1

.NET Compact Framework 3.5 프로젝트에서 WebBrowser 구성 요소를 사용하고 싶습니다. 나는 이것에 대한 모순 된 정보에 직면 해있다. 내 Main 방법에 [STAThread] 지시어를 넣어 가지고있는 것처럼이 소리, 나에게Compact Framework의 웹 브라우저

System.Threading.ThreadStateException: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment. 
at System.Windows.Forms.WebBrowserBase..ctor(String clsidString) 
at System.Windows.Forms.WebBrowser..ctor() 
at dce.pd.dialogmgr.baseimpl.DialogDeviceImpl.createGui(XmlElement pDialogManagerNode) in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\baseimpl\DialogDeviceImpl.cs:line 362 
at dce.pd.dialogmgr.baseimpl.DialogDeviceImpl.init() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\baseimpl\DialogDeviceImpl.cs:line 118 
at dce.pd.dialogmgr.thinimpl.ThinClient.createDeviceImpl() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 82 
at dce.pd.dialogmgr.thinimpl.ThinClient.init() in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 87 
at dce.pd.dialogmgr.thinimpl.ThinClient.form_Load(Object sender, EventArgs e) in C:\sourceview\CS.NETCF.2008\dce\pd\dialogmgr\thinimpl\ThinClient.cs:line 66 
at System.Windows.Forms.Form.OnLoad(EventArgs e) 
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 
at System.Windows.Forms.Control.CreateControl() 
at System.Windows.Forms.Control.WmShowWindow(Message& m) 
at System.Windows.Forms.Control.WndProc(Message& m) 
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 

:

난 그냥 그것을 사용하려고하면

, 나는 다음과 같은 예외를 얻을.

[STAThread] 
static void Main() 
{ 
    ... 
} 

그러나 the [STAThread] option is not available in compact framework. 때문에 작동하지 않습니다. 따라서 응용 프로그램은 지금 컴파일되지 않습니다.

그럼에도 불구하고 Microsoft's documentation에 따르면 WebBrowser 구성 요소는 소형 프레임 워크 프로젝트에 사용할 수 있습니다. 몇 가지 예도 있습니다. (불행히도 전체 코드는 제공되지 않습니다.)

그래서 나는 무엇을 놓치고 있습니까?

+0

이 프로젝트를 어떻게 개발하고 있습니까? [WebBrowser Control] (https://msdn.microsoft.com/en-us/library/aa752040.aspx)을 사용했을 때 Visual Studio 2008에서 개발 중이었습니다. VS2010 이상에서는 .Net CF . – jp2code

+0

그것은 컴팩트 프레임 워크와 함께 Visual Studio 2008에 있습니다. 012 – bvdb

답변

1

나는 마침내 여기에서 잘못된 것을 발견했다.

사실, 위 예외 (예 : System.Threading.ThreadStateException: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.)는 내 랩톱에서 직접 컴파일 된 실행 파일을 실행하려고 시도 할 때 나타납니다.

시뮬레이터가 저를 위해 작동하지 않았습니다. 그리고 마침내 시뮬레이터가 작동하게되었습니다. 이름에서 "에뮬레이터"로 끝나는 "에뮬레이터"장치를 선택해야한다는 것을 알게되었습니다. (예 : 'Windows Mobile 6 Emulator'). 도구 모음의 "장치에 연결"단추를 사용하여 테스트하기 전에 이러한 장치를 연결해야합니다. 일단 연결되면 응용 프로그램은 실제로 에뮬레이터에서 정상적으로 실행됩니다.

문제는 남아있다 : ​​그것은 에뮬레이터에 잘 실행 않지만 왜 응용 프로그램이 내 컴퓨터에서 직접 실행하지 않습니다. 그러나 그것은 다른 질문입니다.

물론 운영체제가 다릅니다. 그러나 나는 .NET Framework의 다른 버전을 사용한다는 인상을 받았습니다. 이전에 나는 모든 컴팩트 프레임 워크 응용 프로그램이 완전히 손상된 .net 프레임 워크가있는 랩톱에서 실행될 수 있다고 잘못 생각했습니다. 이제 이것이 잘못되었습니다.

+0

다른 질문에 언급 된 것처럼 간단한 CF 응용 프로그램 만 데스크톱에서 실행됩니다. CF webbrowser 구성 요소는 FF 구성 요소와 다릅니다. CF 하나가 바탕 화면에 등록되지 않았고 앱이 FF 하나를로드하려고 시도하고 STA 예외를 제공합니다. CF webbrowser를 등록하면 COM이 바탕 화면에서 작동하지 않습니다 (그렇게 생각합니다). CF 응용 프로그램이 aygshell 관련 API와 같은 CF 전용 API를 사용하는 경우에는 바탕 화면에서 실행되지 않습니다. 모든 CF가 데스크톱에서 실행되는 것은 아닙니다! – josef

관련 문제