2010-06-21 5 views
3

우리는 WebBrowser 컨트롤을 사용하여 웹 페이지의 요약 정보를 표시하는 winform 앱의 요약보기를 가지고 있습니다. 우리는이를 사용하여 표준 winform 컨트롤을 사용하여 수행 할 수없는 풍부한 표 레이아웃을 얻었습니다. 보기가 클라이언트에 처음 표시 될 때까지 잠시 시간을내어 (백그라운드에서 IE를 시작 함) 응용 프로그램이 몇 초 동안 멈 춥니 다. 백그라운드에서 IE를 스핀 업 (spun-up)시킬 수있는 몇 가지 사전로드 메카니즘을 고려 중이며 커뮤니티 가이드가 필요합니다.WinForm WebBrowser 컨트롤의로드가 느립니다. 사전로드를위한 가장 좋은 방법은 무엇입니까?

앱 시작시 웹 브라우저 컨트롤을 사용하여 화면이나 보이지 않는 양식을 시작하거나 앱 시작시 일종의 사이드 스레드에서 IE 인스턴스를 시작하는 것이 좋습니다.

제안 사항?

답변

3

응용 프로그램을 시작하는 동안 별도의 스레드에서 컨트롤을 미리로드 할 수 있습니다. 일부 COM 개체 (예 : WebBrowser)를 조작하려면 STA 아파트 상태가 필수입니다.

public static class ControlPreloader 
{ 


    public static void PreloadAsync() 
    { 
     var thread = new Thread(Preload); 
     thread.SetApartmentState(ApartmentState.STA); 
     thread.Start(); 
    } 

    private static void Preload() 
    { 
     using (var hostForm = new Form()) 
     { 
      var control = new WebBrowser(); 
      hostForm.Controls.Add(control); 
      control.CreateControl(); 

      hostForm.Close(); 
     } 
    } 

} 
2

나는 시차로 인한 시차를 경험하지 못했지만 아이디어로 시작시 about:blank으로 이동할 수 있습니다. 그런 다음 브라우저의 DocumentCompleted 이벤트에서 적절한 URL로 탐색을 시작할 수 있습니다. 그게 당신이 "IE의 스핀 업 (spin up)"인지 여부를 이해하는 데 도움이 될 것입니다.

귀하의 아키텍처 측면에서 "풍부한 테이블 레이아웃"이 이미 구축되어 있고 완전히 기능적이지 않은 한,보다 풍부하고 섹시한 컨트롤을 얻으려면 WPF (좋은 WinForms 통합 스토리가 있음)를 사용하는 것이 좋습니다. 귀하의 앱에

+0

조금 늦었습니다. http://www.codeproject.com/KB/GDI-plus/HtmlRenderer.aspx – FastAl