分离线程中的geckofx-c#

分离线程中的geckofx-c#,c#,.net,multithreading,C#,.net,Multithreading,我用的是壁虎22 按钮中的代码(如下)只能正常工作一次。当第二次按下按钮时(在程序的一次运行中),我得到一个错误NullReferenceException(在导航方法中)。有可能把它修好吗 class SomeClass { private GeckoWebBrowser _webBrowser; public SomeClass() { if ( !Xpcom.IsInitialized ) { Xpcom.I

我用的是壁虎22

按钮中的代码(如下)只能正常工作一次。当第二次按下按钮时(在程序的一次运行中),我得到一个错误NullReferenceException(在导航方法中)。有可能把它修好吗

class SomeClass
{
    private GeckoWebBrowser _webBrowser;

    public SomeClass()
    {
        if ( !Xpcom.IsInitialized )
        {
            Xpcom.Initialize( Application.StartupPath + "\\xulrunner" );
        }
        this._webBrowser = new GeckoWebBrowser();
    }

    public void Navigate()
    {
        this._webBrowser.Navigate( "http://google.com/" ); // here exception
    }
}

...
private void Work()
{
    try
    {
        var sc = new SomeClass();
        sc.Navigate();
        MessageBox.Show( "Done" );
    }
    catch ( Exception exception )
    {
        MessageBox.Show( exception.Message );
    }
}

private void button1_Click( object sender, EventArgs e )
{
    Thread thread = new Thread( Work );
    thread.SetApartmentState( ApartmentState.STA );
    thread.Start();
}
...

在哪一行出现异常?@Stormenet,在导航方法中。从外观上看,您正在从非UI线程操作UI元素,因此即使您没有获得NRE,您也会遇到其他问题。您应该只从UI线程操作UI元素。@dedoki好吧,
Navigate
方法不应该被阻塞;它应该是异步的。@dedoki,您可以通过异步而不是额外的线程来实现。您启动一个异步操作,当它完成时(似乎有一个事件触发以表示完成),您将在该庄园中执行下一个操作,依此类推。