Frage

Ich brauche Informationen über angewandt CSS-Stile in HTML-Seite. Ich benutzte AxWebBrowser und iterieren IHTMLDOMNode. Ich bin der Lage, alle Daten zu bekommen und ich brauche den Code in meiner Anwendung bewegen. Das Problem ist, dass dieser Teil im Inneren des Hintergrundarbeiter läuft und ich habe Ausnahme beim Versuch, die Kontrolle zu instanziieren.

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.

Gibt es eine Möglichkeit, wie diese oder eine andere Option als AxWebBrowser zu lösen?

War es hilfreich?

Lösung

Das Problem in Sie laufen ist, dass die meisten Hintergrund-Thread / Arbeiter APIs den Thread in einem Multithreaded Apartment Zustand erstellen. Die Fehlermeldung zeigt an, dass die Steuerung erfordert das Gewinde eine Single Threaded Apartment sein.

Sie können durch die Schaffung eines Themas sich dieses Problem umgehen und die STA Wohnung Zustand auf dem Thread angeben.

var t = new Thread(MyThreadStartMethod);
t.SetApartmentState(ApartmentState.STA);
t.Start();

Andere Tipps

Gehen Sie voran und fügen Sie [STAThread] auf den Haupteintrag der Anwendung, zeigt dies das COM Threading-Modell ist Single-Threaded Apartment (STA)

Beispiel:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new WebBrowser());
    }
}

Wenn Sie [STAThread] auf den Haupteintrag von Ihrer Anwendung verwendet und immer noch den Fehler Sie möglicherweise einen Thread-Safe-Anruf machen , um die Kontrolle ... so etwas wie unten. In meinem Fall mit dem gleichen Problem arbeitete die folgende Lösung!

Private void YourFunc(..)
{
    if (this.InvokeRequired)
    {
        Invoke(new MethodInvoker(delegate()
        {
           // Call your method YourFunc(..);
        }));
    }
    else
    {
        ///
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top