Pergunta

Eu preciso para obter informações sobre os estilos CSS aplicados na página HTML. Eu costumava AxWebBrowser e iterate IHTMLDOMNode. Eu sou capaz de conseguir tudo necessidade dos dados I e mover o código para a minha candidatura. O problema é que esta parte está sendo executado dentro do trabalhador fundo e eu tenho exceção ao tentar instanciar o controle.

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.

Existe alguma maneira de como resolver isso ou outra opção do que AxWebBrowser?

Foi útil?

Solução

O problema que você está correndo em é que a maioria das APIs segmento de segundo plano / trabalhador vai criar o segmento em um estado compartimento com vários segmentos. A mensagem de erro indica que o controle requer a rosca ser um Single Threaded Apartment.

Você pode contornar isso criando um fio-se e especificando o estado apartment STA no segmento.

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

Outras dicas

Vá adiante e adicione [STAThread] para a entrada principal de sua aplicação, isso indica o modelo COM threading é single-threaded apartment (STA)

exemplo:

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());
    }
}

Se você usou [STAThread] à entrada principal de sua aplicação e ainda obter o erro pode ser necessário fazer uma chamada thread-safe para o controle ... algo como abaixo. No meu caso com o mesmo problema a seguinte solução funcionou!

Private void YourFunc(..)
{
    if (this.InvokeRequired)
    {
        Invoke(new MethodInvoker(delegate()
        {
           // Call your method YourFunc(..);
        }));
    }
    else
    {
        ///
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top