2017-01-04 6 views
1

WebBrowserコンポーネントを.NET Compact Framework 3.5プロジェクトで使用したいと考えています。私はこれに関する矛盾した情報に直面している。コンパクトフレームワークのWebブラウザ

私はちょうどそれを使用しようとすると、私は次の例外を取得:私には

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) 

を私はMain方法に[STAThread]ディレクティブを置くために持っているように、これが鳴ります。

[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エミュレータ」など)。テストする前に、ツールバーの[デバイスに接続]ボタンを使用して、これらのデバイスを接続する必要があります。接続が完了すると、アプリケーションは実際にエミュレータ上で正常に動作します。

疑問は残る:それはエミュレータで問題なく動作しないながら、なぜアプリケーションが私のラップトップ上で直接実行されません。しかしそれは別の質問です。

もちろん、オペレーティングシステムは異なります。しかし、私は、システムが.NET Frameworkの異なるバージョンを使用しているという印象を持っています。以前は私は間違って、すべてのコンパクトなフレームワークのアプリは、完全な吹き抜けの.netフレームワークを搭載したノートパソコンでも動作すると想定していました。これは間違っているようです。

+0

あなたの他の質問にコメントされているように、単純なCFアプリケーションだけがデスクトップ上で実行されます。 CFウェブブラウザコンポーネントは、FFウェブブラウザコンポーネントとは異なります。 CF 1はデスクトップに登録されておらず、あなたのアプリはFF 1をロードしようとしてSTAの例外を出します。 CF webbrowserを登録すると、デスクトップ上でCOMは動作しません(私はそう仮定します)。 CFアプリケーションが(aygshellに関連するもののような)CFのみのAPIを使用する場合、それはデスクトップでは実行されません。すべてのCFがデスクトップ上で動作するわけではありません! – josef

関連する問題