[英]Why doesn't GeckoFX Navigate() request work if launched in a seperate thread?
为什么这项工作有效,
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();
}
GeckoBrowser是Windows窗体控件。 只能从创建控件的线程中调用控件的属性和方法。 要使用另一个线程的控件执行任何操作,您需要使用Invoke或BeginInvoke方法,例如
Thread thread = new Thread(delegate()
{
Action<string> action = url => GeckoBrowser.Navigate(url);
GeckoBrowser.Invoke(action, new object[] { "http://www.google.com/" });
});
请记住,由于底层引擎XulRunner(XPCOM),GeckoFX组件通常不是多可读的。 这是因为XulRunner本身是一个单线程运行时。
它不起作用,因为Geckofx本身不支持交叉线程,如果要进行交叉线程,则需要先调用它。
Thread thread = new Thread(delegate()
{
this.Invoke(new Action(() => {GeckoBrowser.Navigate("http://www.google.com/");}));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.