2013-02-26 92 views
0

我正在创建一个应用程序,并且我想要创建多个线程,每个线程都必须创建一个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。

+0

当你创建一个web浏览器对象,你应该分配事件处理程序DocumentCompleted处理,这样就保证每个离散web浏览器实例知道如何处理自己做的,当文件装载完成。您不会将处理程序“引导”到“正确”实例。这是倒退。 – 2013-02-26 15:00:34

+0

按照Hans Passant的答案http://stackoverflow.com/questions/4269800/webbrowser-control-in-a-new-thread – volody 2013-02-26 15:48:30

回答

0

你不是在你的线程中创建几个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语句正确检查的两个值的web浏览器对象?

if(a==1 || a==2) 
    methode2(wb); 
相关问题