2011-10-12 247 views
-2

我正在做一個程序,它轉到鏈接+參數(字符串),編輯一些值並點擊保存按鈕。c#for循環無法正常工作

這裏是一個的問題,讓我的代碼部分:

for (int i = 0; i <= s; i++) 
{ 
    webBrowser1.Navigate("someUrl" + parameter[i]); 
    timer1.Enabled = true; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    //some code to change some values and click on a save button... 
    timer1.Enabled = false; 
} 

問題是,它僅循環一次,而不是做IT方面的時間。我正在使用計時器等待幾秒鐘,以便加載頁面...

+6

's'是什麼?我想如果你在你的循環中加入了'Console.WriteLine(i)',你會發現它*循環了''次。 –

+3

你怎麼知道它只發生一次?你有沒有用調試器完成它? – Chris

+3

我懷疑它「完美地工作」,但基本方法是有缺陷的。發生這種情況時應該發生什麼:'browser.Navigate(「http:// foo/1」); browser.Navigate(「http:// foo/2」);'?? (提示:考慮等到適用的「導航完成」事件)。在任何情況下,投票關閉,因爲這是太本地化(不夠通用),並且不包括相關的調試信息。 – 2011-10-12 20:55:02

回答

1

您可以嘗試使用WebBrowserDocumentCompletedEvenHandler

public void Init() 
{ 
    myWebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(NavigationCompleted); 
} 

public void Navigate() 
{ 
    myWebBrowser.Navigate(parameter[index++]); 
} 

private void NavigationCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    //Do what you have to do with the document loaded in the browser 
    //... 
    //Submit your edit form (click save button) 
    //... 
    Navigate(); //Next! 
} 
+0

這並不一定允許有足夠的時間來編輯他的值。 –

1

你的循環肯定是執行s倍,但timer1_Tick肯定是隻執行一次。這是因爲你在快速模式下一次又一次地啓用timer1,但只有幾秒鐘後timer1_Tick最終觸發,定時器纔會被禁用一次。

0

看一看System.ComponentModel.BackgroundWorker。它使您可以非常輕鬆地在後臺運行,並在工作完成時得到通知。可能是你所尋找的。