2017-01-04 1 views
1

Ich möchte eine WebBrowser Komponente in einem .NET Compact Framework 3.5-Projekt verwenden. Ich bin mit widersprüchlichen Informationen darüber konfrontiert.Webbrowser in kompaktem Framework

Wenn ich versuche einfach, es zu benutzen, erhalte ich die folgende Ausnahme:

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) 

Für mich das klingt wie ich die [STAThread] Richtlinie meine Main Methode zu setzen haben.

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

Aber das funktioniert auch nicht, weil the [STAThread] option is not available in compact framework.. Also, die Anwendung wird jetzt nicht einmal kompilieren.

Dennoch, nach Microsoft's documentation, ist die WebBrowser Komponenten für kompakte Rahmenprojekt verfügbar. Es gibt sogar einige Beispiele. (Leider wird der vollständige Code nicht zur Verfügung gestellt).

Also, was fehlt mir?

+0

Woran entwickeln Sie dieses Projekt? Als ich das [WebBrowser Control] (https://msdn.microsoft.com/en-us/library/aa752040.aspx) verwendet habe, habe ich in Visual Studio 2008 entwickelt. VS2010 und neuere Versionen haben keine Unterstützung für .Net CF . – jp2code

+0

es ist in Visual Studio 2008, mit kompaktem Framework 3.5 – bvdb

Antwort

1

Ich habe endlich gefunden, was hier nicht stimmt.

Die Ausnahme oben (d. H. System.Threading.ThreadStateException: ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the current thread is not in a single-threaded apartment.) wird nur angezeigt, wenn ich versuche, die kompilierte ausführbare Datei direkt auf meinem Laptop auszuführen.

Der Simulator funktionierte nicht für mich. Und ich habe endlich den Simulator in Betrieb genommen. Ich erkannte, dass ich ein "Emulator" Gerät auswählen musste, das mit "Emulator" in seinem Namen endet. (z.B. "Windows Mobile 6 Emulator"). Sie müssen diese Geräte vor dem Testen über die Schaltfläche "Verbindung mit Gerät verbinden" in der Symbolleiste verbinden. Sobald die Verbindung hergestellt ist, läuft die Anwendung auf dem Emulator einwandfrei.

Die Frage bleibt: , warum die Anwendung läuft auf meinem Laptop nicht direkt, während es in einem Emulator gut laufen wird. Aber das ist eine andere Frage.

Natürlich ist das Betriebssystem anders. Ich habe aber den Eindruck, dass das System eine andere Version des .NET Frameworks verwendet. Zuvor Ich ging fälschlicherweise davon aus, dass alle kompakten Framework-Apps auch auf einem Laptop mit dem vollständigen .NET-Framework laufen könnten. Jetzt scheint es, dass dies falsch ist.

+0

Wie in Ihrer anderen Frage kommentiert, werden nur einfache CF-Anwendungen auf dem Desktop ausgeführt. Die CF-Webbrowser-Komponente unterscheidet sich von der FF-Komponente. Die CF-Version ist nicht auf dem Desktop registriert und Ihre App versucht, die FF-Datei zu laden, wobei die STA-Ausnahme angegeben wird. Die Registrierung des CF-Webbrowsers COM funktioniert nicht auf dem Desktop (nehme ich an). Wenn eine CF-Anwendung nur CF-APIs verwendet (wie aygshell-bezogene APIs), wird sie nicht auf dem Desktop ausgeführt. Nicht jeder CF wird auf dem Desktop laufen! – josef