2015-01-14 4 views
0

이후에 MessageBox를 올바르게 표시하려면 웹 페이지가 Winforms WebControl에 완전히로드되었습니다. 다음 줄을 실행하기 전에 잠시 기다리는 방법

나는 지연이 코드를 사용 : 다음의

System.Threading.Thread.Sleep(4000); 
Task.Delay(2000); 

없음이 작동하지 않습니다. 문제는 무한 루프가 있다는 것입니다.

누군가가 해결책이나 더 나은 대안을 제공 할 수 있습니까?

여기 아메드 ilyas 내가

private void btnGo_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string WebPage = txtURL.Text.Trim(); 
       Webcntrl.Navigate(WebPage); // Webcntrl is Name of webcontrol in my Windows Applications 

       Webcntrl.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(SiteLoaded); 


      } 
      catch (Exception ex) 
      { 

      } 


     } 

     private void SiteLoaded(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      MessageBox.Show("hI ! website loaded Sucessfully");   

     } 

아래에 따라 코드를 수정하지만 지금, 메시지가 여러 번 나타 제안 내 코드에 따라

private void btnGo_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string WebPage = txtURL.Text.Trim(); 
     Webcntrl.Navigate(WebPage); // Webcntrl is Name of webcontrol in my Windows Applications 

     while (Webcntrl.ReadyState.ToString() != "Complete") 
     { 
      //System.Threading.Thread.Sleep(4000); 
      //Task.Delay(2000); 
     } 
     MessageBox.Show("hI ! website loaded Sucessfully"); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

입니다.

+1

" 그러나 둘 다 작동하지 않는다 "는 문제에 대한 좋은 설명이 아닙니다. 정확히 무엇이 잘못 되었습니까? –

+3

웹 브라우저 컨트롤의 documentcomplete 이벤트를 사용해야합니다. http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx –

+0

또한,'Task.Delay (2000)'는 실제로 'Waiting Task.Delay (2000)'또는'Task.Delay (2000) .Wait()'로 호출하지 않는 한 당신의 코드는 기다리고있다. –

답변

1

당신은 웹 브라우저 컨트롤의 DocumentComplete 이벤트를 사용한다 :

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx

이 페이지가로드가 완료되었을 때 사용자에게 알립니다. 당신이하고있는 일은 잠시 루프에 들어가서 브라우저 컨트롤이 실행되고있는 쓰레드를 기다리는 것입니다. 그러므로 쓰레드를 넣을 때조차도 아무 것도 작동하지 않습니다. (BTW는 아무 것도하지 않는 것이 좋습니다)

+0

나는 내 질문을 수정 해 주었다 .. 나는 wat wat 제안을 사용한다. 일부 URL 메시지 팝업에서는 여러 시간이 SiteLoaded 함수에서 여러 번 이동 함을 의미합니다. –

+0

먼저 탐색하기 전에 먼저 이벤트에 가입해야합니다. 그렇지 않으면 알림 수신이 늦을 수 있습니다. 둘째, 일부 웹 사이트가 탐색 중이거나 사이트에서 여러 개의 탐색을 할 수있는 경우 이벤트가 여러 번 제기 될 수 있습니다. 아무 것도 할 수 없습니다. eventhandler 인수에 포함 된 내용을 검사 한 다음 해당 이벤트 핸들러가 작동하는지 확인 했습니까? ("e"매개 변수) –