2013-02-26 39 views
0

我正在研究一個應用程序,並且我想創建多個線程,每個線程都必須創建WebBrowser,這些使用方法中的每個WebBrowser使用方法webBrowser_DocumentCompleted如何在許多Web瀏覽器上使用不同的事件

每個創建的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(methode1)); 
       thread.Start(); 
      } 
     } 

所以每個由線程創建的web瀏覽器都必須有自己的方法webBrowser_DocumentCompleted,以免混淆其他web瀏覽器的結果。

或者使用相同的方法webBrowser_DocumentCompleted爲所有創建的網頁瀏覽器,但問題是如何指定哪個webbrowser,調用方法webBrowser_DocumentCompleted。

在此先感謝

回答

5

很容易,更改方法的名稱。

當您建立WebBrowser,您可以指定DocumentCompleted是你想要的任何方法,例如:

firstWebBrowser.DocumentCompleted += firstDocumentCompleted; 
secondWebBrowser.DocumentCompleted += secondDocumentCompleted; 
thirdWebBrowser.DocumentCompleted += thirdDocumentCompleted; 

如果您使用的設計,它只是簡單。在「事件」選項卡中,只需輸入一個新的(唯一的)方法名稱即可。

既然你提到線程,我設想一個問題,如果你不搶先的網絡瀏覽器(因此事件處理程序),你將擁有量。但是如果您需要幫助,我們需要更具體的用例示例。

+1

此。當然,它假定代碼已經存在,但如果沒有,則OP有需要解決的第一問題等。 ':)' – 2013-02-26 12:40:47

+1

感謝魯迪·維瑟,更新我的更多解釋 – Abdel 2013-02-26 13:26:13

+1

@AbdelkarimTinguer我不知道我看你一眼正在做什麼的問題,但如果代碼能以這樣的方式被寫入一個(可能參數化)方法將完成這項工作,但單個事件處理程序無法查看*匿名函數*。 'webBrowser.DocumentCompleted + =(OBJ,E)=> {Console.WriteLine(obj.ToString()); };(語法可能稍微偏離,但你明白了)然後這個答案仍然有效。 – 2013-02-26 15:28:25

相關問題