Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebBrowser控件不呈现某些页面_C#_.net_Webbrowser Control_Webpage Screenshot - Fatal编程技术网

C# WebBrowser控件不呈现某些页面

C# WebBrowser控件不呈现某些页面,c#,.net,webbrowser-control,webpage-screenshot,C#,.net,Webbrowser Control,Webpage Screenshot,我正在开发一个托管WebBrowser控件并保存网页截图的应用程序。 (C#,VS2008,IE 9,Vista。所有内容都是最新的。功能_浏览器_仿真设置为0x2328) 应用程序获取URL列表并逐个导航到URL,并保存屏幕截图。应用程序流程简单如下:从文件中读取url,首先使用HttpWebRequest获取它,如果它存在并且是html,则调用webBrowser.Navigate(url),等待webBrowser.ReadyState为WebBrowserReadyState.Compl

我正在开发一个托管WebBrowser控件并保存网页截图的应用程序。 (C#,VS2008,IE 9,Vista。所有内容都是最新的。功能_浏览器_仿真设置为0x2328)

应用程序获取URL列表并逐个导航到URL,并保存屏幕截图。应用程序流程简单如下:从文件中读取url,首先使用HttpWebRequest获取它,如果它存在并且是html,则调用webBrowser.Navigate(url),等待webBrowser.ReadyState为WebBrowserReadyState.Complete(处理webBrowser.DocumentCompleted事件,在ReadyState为WebBrowserReadyState.Complete之前不执行任何操作),为了安全起见,再等几秒钟(测试时间长达10秒),保存屏幕截图并移动到下一个url。 它适用于几乎所有的URL(来自许多不同站点的页面),但我的应用程序中嵌入的WebBrowser不会呈现某些URL,尤其是来自www.securityfocus.com的页面,例如:

我尝试禁用缓存,在每次请求之前清除缓存,最多等待10秒,只是为了给它一些时间渲染等等,但都没有效果。我在视觉上确认WebBrowser不会呈现页面,这与保存屏幕截图无关(我正在使用BitBlt,但我认为这与此无关)。页面使用IE正常呈现


请让我知道,如果你有任何建议,为什么会发生这种情况。提前谢谢

我设法解决了这个问题! 事实证明,在触发最终DocumentCompleted事件后,webbrowser需要少量时间来实际呈现页面。通常我们不会注意到这种轻微的延迟,但当您在页面的最后一个DocumentCompleted(加载url时会触发许多DocumentCompleted事件)DocumentCompleted之后运行循环时,webbrowser在保存屏幕截图之前找不到时间呈现页面。因此您必须给它一些时间来呈现页面

如果您天真地在UI线程上调用sleep以等待渲染,则渲染也将休眠,并且在保存屏幕截图之前不会渲染页面


因此,您必须在另一个线程中等待,让UI线程处于空闲状态,以便有时间完成页面呈现,然后通过在主UI线程上调用Invoke方法从子线程返回UI线程

网页在IE中呈现得很好,WebBrowser是否扩展得足够?也许可以尝试最大化窗口?+1我希望这也能解决我的渲染问题-听起来很有希望!