2011-10-12 9 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; 
} 

문제는 다음과 같습니다

여기에 문제를 만들고있다 내 코드의 일부입니다. 타이머를 사용하여 페이지가로드 될 때까지 몇 초 기다리는 중입니다 ...

+6

's'란 무엇입니까? 루프에'Console.WriteLine (i)'과 같은 것을 넣으면, * 반복되는's' 시간임을 알 수 있습니다. –

+3

한 번만 발생한다는 것을 어떻게 알 수 있습니까? 디버거를 통해 그걸 밟았습니까? – Chris

+3

나는 그것이 "완벽하게 작동한다"라고 생각하지만 근본적인 접근법에는 결함이있다. 이것이 발생할 때 *해야 할 일 *'browser.Navigate ("http : // foo/1"); browser.Navigate ("http : // foo/2");'?? (힌트 : 적용 가능한 "네비게이션 완료"이벤트가 발생할 때까지 기다리는 것을 고려하십시오.) 어떤 경우이든, 너무 지역화 된 (너무 일반 적이기 때문에) 닫고 관련 디버깅 정보를 포함하지 않기 때문에 투표를 종료하십시오. –

답변

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을 살펴보십시오. 이 기능을 사용하면 백그라운드에서 매우 쉽게 작업을 수행하고 작업이 완료되면 알려줄 수 있습니다. 그것은 당신이 찾고있는 것일지도 모른다.

관련 문제