2011-03-24 8 views
1

하나의 방법이 있습니다. 당신은 그것을 테스트 할 수WebBrowser 문제 무한 로딩

private readonly 
    public HtmlDocument Browse() 
    { 
     var _browser = new WebBrowser(); 
     var link = "http://hotline.ua/sr/?q=allo"; 
     var loadFinished = false; 

     _browser.DocumentCompleted += delegate { loadFinished = true; }; 
     try 
     { 
      _browser.Navigate(link); 
     } 
     catch (Exception xx) 
     { 
      if (!(xx is UriFormatException)) 
       throw; 

      loadFinished = false; 
     } 

     while (! loadFinished ) 
      Thread.Sleep(50); 

     loadFinished = false; 

     return _browser.Document; 
    } 

을 그리고 어딘가에 코드에서 내가 부르는 방법 :

var doc = Browse(); 

을 대신 HTMLDocument의를 얻는 나는에 무한 루프에 도착 :

while (! loadFinished ) 
      Thread.Sleep(50); 

이 DocumentCompleted는 결코 해고되지 않는 것 같습니다. 그러나 웹 브라우저에서이 페이지를 쉽게 얻을 수 있습니다. 아무도 이유가 무엇인지 압니까? 그리고 HtmlDocument를 얻으려면 어떻게해야합니까?

답변

1

죄송 오.

이 이벤트가 발생하지 이유 그건 : 이벤트가 이전에 해고의 resourses을 해제하기 때문에 내가

Thread.Sleep(50); 

를 사용해서는 안

나는이 주제를 게시 한 후, 해결책을 발견했다. 따라서 스레드는 문서 완료 메소드를 치기 전에 죽게됩니다.

에 대해 내가 변경하는 경우 : 그것은 완벽하게 작동된다

Application.DoEvents(); 

.

답장을 보내 주셔서 감사합니다.

0

UriFormatException이 아닌 예외가 있으므로 loadFinished는 항상 거짓입니다. 그런 다음 DocumentComplete에 도달 할 수 없습니다.
이 줄에 Catch에 중단 점을 넣고 어떤 예외가 throw되는지 확인하십시오.