Single-threaded apartment - ne peut pas instancier contrôle ActiveX
J'ai besoin d'obtenir de l'information sur appliquer des styles CSS dans la page HTML. J'ai utilisé AxWebBrowser et de réitérer IHTMLDOMNode. Je suis en mesure d'obtenir toutes les données dont j'ai besoin et y placer le code dans mon application. Le problème c'est que cette partie est en cours d'exécution à l'intérieur de l'arrière-plan travailleur et j'ai eu une exception lorsque l'on essaie d'instancier le contrôle.
AxWebBrowser browser = new AxWebBrowser();
ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated
because the current thread is not in a single-threaded apartment.
Est-il de toute façon comment résoudre ce problème ou l'autre option que AxWebBrowser?
Vous devez vous connecter pour publier un commentaire.
Le problème que vous rencontrez est que la plupart des thread d'arrière-plan /travailleur Api permettra de créer le thread dans un multi-threaded Apartment état. Le message d'erreur indique que le contrôle exige que le fil soit un Seul thread Appartement.
Vous pouvez contourner le problème en créant un thread de vous-même et en spécifiant le personnel de l'appartement de l'état sur le fil.
[STAThread]
capacité.)Aller de l'avant et ajouter [STAThread] à l'entrée principale de votre application, ce qui indique la COM modèle de thread est single-threaded apartment (STA)
exemple:
Si vous avez utilisé
[STAThread]
à l'entrée principale de votre application et de l'erreur persiste, vous pouvez avoir besoin de faire un Thread-Safe appel pour le contrôle de... quelque chose comme ci-dessous. Dans mon cas, avec le même problème, la solution suivante a fonctionné!