对 COM 组件的调用返回了错误 HRESULT E_FAIL
我用 WebBrowser(.net 2.0内置的类) 来实现网页截图功能,代码正常运行一两天,就会出现异常:对 COM 组件的调用返回了错误 HRESULT E_FAIL。
更离奇的是:一但出现一次,只要不重启程序,程序运行这段代码时,这个异常会一直出现。我不懂 COM组件(WebBrowser)的实现,难道它是 Singleton 模式吗?我明明是每次都释放,下次运行时,再创建一个新实例。
下面是截图这部分的代码:
using (WebBrowser webBrowser = new WebBrowser())
{
webBrowser.ScrollBarsEnabled = false;
webBrowser.ScriptErrorsSuppressed = true;
webBrowser.Navigate(url);
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
if (webBrowser.Document.Body.InnerText.Trim() == "")
{
throw new Exception("Document.Body.InnerText 为空,无法完成截图。");
}
if (webBrowser.Document.Body.InnerText.Contains("已取消到该网页的导航"))
{
throw new Exception("加载网页出错:已取消到该网页的导航。无法完成截图。");
}
webBrowser.ClientSize = new Size(this.browserWidth, this.browserHeight);
webBrowser.ScrollBarsEnabled = false;
this.bitmap = new Bitmap(webBrowser.Bounds.Width, webBrowser.Bounds.Height);
webBrowser.BringToFront();
webBrowser.DrawToBitmap(this.bitmap, webBrowser.Bounds); // 将图片截取到全局变量
// 不再要再做缩略图转换,可以提高效率和稳定性。
//bitmap = (Bitmap)bitmap.GetThumbnailImage(thumbnailWidth, thumbnailHeight, null, IntPtr.Zero);
}
另外,CSDN 这个帖子编辑框,一打字快了,怎么这卡?它好像一直在用 ajax 回传东西还是怎么,你们的浏览器这样吗?用着真难受。