我正在处理一个应用程序,我想创建多个线程,每个线程必须创建一个WebBrowser
,每个WebBrowser
使用方法webBrowser_DocumentCompleted
。
每个已创建的WebBrowser
实例如何在所有实例中拥有自己的DocumentCompleted
处理程序,而不是相同的webBrowser_DocumentCompleted
方法。
我解释说:
在一种情况下,使用单个Web浏览器进行操作
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();
}
然后去做,我想我必须有几个webbrowser,所以解决方案是为每个操作创建一个线程
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浏览器的结果之间混淆。
或者,对所有创建的Web浏览器使用相同的方法webBrowser_DocumentCompleted
,但问题是如何指定哪个webbrowser,调用webBrowser_DocumentCompleted方法。
答案 0 :(得分:0)
你没有在你的线程中制作几个webbrowsers,你仍然只是使用你没有告诉我们的地方创建的那个。
尝试在methode函数中实际创建webbrowser对象
private void button1_Click(object sender, EventArgs e)
{
for(int i=0;i<5;i++)
methode1();
}
public void methode1()
{
System.Windows.Forms.WebBrowser wBrowser = System.Windows.Forms.WebBrowser();
wBrowser.DocumentCompleted +=webBrowser_DocumentCompleted;
wBrowser.Navigate("http://www.test.com");
a = 1;
}
另外,您知道可以在一个if语句中检查a的两个值吗?
if(a==1 || a==2)
methode2(wb);