如果在单独的线程中启动,为什么GeckoFX Navigate()请求不起作用?

时间:2009-10-24 18:34:37

标签: c# .net browser multithreading geckofx

为什么这样做,

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

3 个答案:

答案 0 :(得分:7)

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

Thread thread = new Thread(delegate()
{
  Action<string> action = url => GeckoBrowser.Navigate(url);
  GeckoBrowser.Invoke(action, new object[] { "http://www.google.com/" });
});

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

{display:none}