2013-02-26 52 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); 
相關問題