我正在创建一个应用程序,并且我想要创建多个线程,每个线程都必须创建一个WebBrowser
,每个WebBrowser
这些使用方法webBrowser_DocumentCompleted
。如何使用多个网络浏览器使用线程
如何在每个创建的WebBrowser
实例有它自己的DocumentCompleted
处理程序,而不是在所有他们的相同webBrowser_DocumentCompleted
方法。
我解释一下:
在一种情况下,用一个单一的网络浏览器的操作
int a = 0;
private void button1_Click(object sender, EventArgs e)
{
methode1();
}
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (a == 1) methode2(wb);
if (a == 2) methode2(wb);
}
public void methode1()
{
webBrowser.Navigate("http://www.test.com");
a = 1;
}
public void methode2()
{
HtmlElement txt1 = webBrowser1.Document.GetElementById("tesxtbox1");
txt1.SetAttribute("value", "test");
webBrowser.Document.Forms[0].InvokeMember("submit");
a = 2;
}
public void methode3()
{
webBrowser.Navigate("http://www.test3.com");
}
,但如果我要进行多次操作,即在butoon1我补充一下:
private void button1_Click(object sender, EventArgs e)
{
for(int i=0; i<5 ;i++)
methode1();
}
然后做到这一点,我想我必须有几个网页浏览器,所以解决方法是为每个操作创建一个线程
private void button1_Click(object sender, EventArgs e)
{
for(int i=0; i<5 ;i++)
{
Thread thread = new Thread(new ThreadStart(method1));
thread.Start();
}
}
所以每个由线程创建的web浏览器都必须有自己的方法webBrowser_DocumentCompleted
,以免混淆其他web浏览器的结果。
或者使用相同的方法webBrowser_DocumentCompleted
为所有创建的网页浏览器,但问题是如何指定哪个webbrowser,调用方法webBrowser_DocumentCompleted。
当你创建一个web浏览器对象,你应该分配事件处理程序DocumentCompleted处理,这样就保证每个离散web浏览器实例知道如何处理自己做的,当文件装载完成。您不会将处理程序“引导”到“正确”实例。这是倒退。 – 2013-02-26 15:00:34
按照Hans Passant的答案http://stackoverflow.com/questions/4269800/webbrowser-control-in-a-new-thread – volody 2013-02-26 15:48:30