2011-10-31 55 views
0

我得到了一個非常奇怪的問題,發生在我所有的DocumentCompleteEventHandlers中。DocumentCompleteEventHandler在算術級數(C#)中觸發

說我有一個非常簡單的處理程序:

void Download_Complete_Handler(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      string link = webBrowser1.Url.ToString(); 
      Regex rgx = new Regex("(^https://mysite.com/)"); 
      if (rgx.IsMatch(link)) // have made it this way so that I don't remove the handler for every page. Pretty handy. 
      { 
       string name = choosename(); // my custom function to create new name 
       string surname = choosesurname(); // my custom function to create new surname 
       Random rand = new Random(); 

       webBrowser1.Document.GetElementById("id").Focus(); 
       SendKeys.SendWait(name + "." + surname + rand.Next(0, 9999).ToString()); 

       name = ""; 
       surname = ""; 
      } 
     } 

我呼籲在下面的函數該處理器被稱爲按鈕點擊:

void myfunction() 
{ 
    try 
    { 
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Download_Complete_Handler); 
    webBrowser1.Navigate("mysite.com"); 
    } 
    catch(Exception ex) 
    { 
    log(ex);// my custom log function 
    } 
} 

現在,當我第一次啓動該程序,然後點擊按鈕來觸發處理程序,所有工作都可以正常運行:一旦頁面加載完畢,Web瀏覽器就會被導航 - 所需的字段被填充。現在,讓我們再次點擊同一個按鈕,以便所有進程都可以全部開始再次。這次該處理程序被調用兩次:一旦加載頁面,該字段被填充兩次。第三次點擊將觸發處理程序三次,等等。

你知道我在做什麼錯嗎?

回答

3

是的 - 您每次點擊該按鈕時都會添加一個新的處理程序。舊的處理程序不會被刪除 - 它們將永遠存在(除非你明確地刪除它們)。

添加處理程序一次,然後只是在按鈕點擊執行導航。

順便說一句,創建Random這樣的多個實例通常不是一個好主意。見my article on the topic

+0

啊,哎呀。謝謝。在完成所有工作之後,我在處理程序內添加了' - ='行,以便在事後刪除它。現在可以工作了。 –