1

为什么这行得通,

    private void buttonBoo_Click(object sender, EventArgs e)
    {
        GeckoBrowser.Navigate("http://www.google.com/");
    }

这不是吗?

    private void buttonBoo_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(delegate()
        {
            GeckoBrowser.Navigate("http://www.google.com/");
        });

        thread.Start();
    }
4

3 回答 3

7

GeckoBrowser 是一个 Windows 窗体控件。控件的属性和方法只能从创建控件的线程中调用。要对来自另一个线程的 Control 执行任何操作,您需要使用 Invoke 或 BeginInvoke 方法,例如

Thread thread = new Thread(delegate()
{
  Action<string> action = url => GeckoBrowser.Navigate(url);
  GeckoBrowser.Invoke(action, new object[] { "http://www.google.com/" });
});
于 2009-10-24T19:33:38.890 回答
2

请记住,由于底层引擎 XulRunner (XPCOM),GeckoFX 组件通常不是多线程可读的。这是因为 XulRunner 本身就是一个单线程运行时。

于 2011-08-13T17:22:23.013 回答
0

它不起作用,因为 Geckofx 本身不支持跨线程,如果你想做跨线程,你需要先调用它。

    Thread thread = new Thread(delegate()
    {
         this.Invoke(new Action(() => {GeckoBrowser.Navigate("http://www.google.com/");}));
    });
于 2015-07-15T07:45:09.713 回答