Convertinghtmlpagesusingwebbrowserinasp.nettakestoomuchtimetogenerate重html页面我有一个问题,当我使用webbrowser将html页面转换为图像时,重html页面需要太多时间。它适用于小的html页面,但是当html页面很重时,它就会卡在Application.DoEvent();函数WebBrowserm_WebBrowser=newWebBrowser();m_WebBrowser.ScriptErrorsSuppressed=true;m_WebBrowser.ScrollBarsEnabled=false;m_WebBrowser.Navigate(m_Url);m_WebBrowser.DocumentCompleted+=newWebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);while(m_WebBrowser.ReadyState!=WebBrowserReadyState.Complete)**Application.DoEvents();**m_WebBrowser.Dispose();创建HTML页面后,我们将html页面的URL传递给此GetWebSiteThumbnail()函数。代码:publicclassWebsiteThumbnailImageGenerator{publicstaticBitmapGetWebSiteThumbnail(stringUrl,intBrowserWidth,intBrowserHeight,intThumbnailWidth,intThumbnailHeight){WebsiteThumbnailImagethumbnailGenerator=newWebsiteThumbnailImage(Url,BrowserWidth,BrowserHeight,ThumbnailWidth,ThumbnailHeight);返回thumbnailGenerator.GenerateWebSiteThumbnailImage();}privateclassWebsiteThumbnailImage{publicWebsiteThumbnailImage(stringUrl,intBrowserWidth,intBrowserHeight,intThumbnailWidth,intThumbnailHeight){this.m_Url=Url;this.m_BrowserWidth=BrowserWidth;this.m_BrowserHeight=BrowserHeight;this.m_ThumbnailHeight=ThumbnailHeight;this.m_ThumbnailWidth=ThumbnailWidth;}私有字符串m_Url=null;publicstringUrl{get{returnm_Url;}设置{m_Url=值;}}私有位图m_Bitmap=null;publicBitmapThumbnailImage{get{returnm_Bitmap;}}privateintm_ThumbnailWidth;公共intThumbnailWidth{得到{返回m_ThumbnailWidth;}设置{m_ThumbnailWidth=值;}}privateintm_ThumbnailHeight;publicintThumbnailHeight{get{返回m_ThumbnailHeight;}设置{m_ThumbnailHeight=值;}}privateintm_BrowserWidth;publicintBrowserWidth{get{返回m_BrowserWidth;}设置{m_BrowserWidth=值;}}privateintm_BrowserHeight;publicintBrowserHeight{get{返回m_BrowserHeight;}设置{m_BrowserHeight=值;}}publicBitmapGenerateWebSiteThumbnailImage(){Threadm_thread=newThread(newThreadStart(_GenerateWebSiteThumbnailImage));m_thread.SetApartmentState(ApartmentState.STA);m_thread.Start();m_thread.Join();返回m_Bitmap;}privatevoid_GenerateWebSiteThumbnailImage(){WebBrowserm_WebBrowser=newWebBrowser();m_WebBrowser.ScrollBarsEnabled=false;m_WebBrowser.Navigate(m_Url);m_WebBrowser.DocumentCompleted+=newWebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);而(m_WebBrowser.ReadyState!=WebBrowserReadyState.Complete)Application.DoEvents();m_WebBrowser.Dispose();}privatevoidWebBrowser_DocumentCompleted(objectsender,WebBrowserDocumentCompletedEventArgse){WebBrowserm_WebBrowser=(WebBrowser)sender;m_WebBrowser.ClientSize(this.newSize=m_BrowserWidth,this.m_BrowserHeight);m_WebBrowser.ScrollBarsEnabled=false;m_Bitmap=newBitmap(m_WebBrowser.Bounds.Width,m_WebBrowser.Bounds.Height);m_WebBrowser.BringToFront();(位图)m_Bitmap.GetThumbnailImage(m_ThumbnailWidth,m_ThumbnailHeight,null,IntPtr.Zero);我稍微改变了你的类,它现在使用async/await而不是忙等待你可以使用它varth=newWebsiteThumbnailImage("http://www.google.com",1024,768,256,192);this.BackgroundImage=awaitth.GenerateWebSiteThumbnailImage();.以上就是C#学习教程:在asp.net中使用webbrowser将html页面转为图片需要太多时间生成重html页面的图片分享全部内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—classWebsiteThumbnailImage{publicWebsiteThumbnailImage(stringUrl,intBrowserWidth,intBrowserHeight,intThumbnailWidth,intThumbnailHeight){this.Url=Url;this.BrowserWidth=BrowserWidth;this.BrowserHeight=BrowserHeightn;this.Thumb}publicstringUrl{set;得到;}publicintThumbnailWidth{设置;得到;}publicintThumbnailHeight{设置;得到;}publicintBrowserWidth{设置;得到;}publicintBrowserHeight{设置;得到;}私有位图m_Bitmap=null;publicBitmapThumbnailImage{get{returnm_Bitmap;}}publicTaskGenerateWebSiteThumbnailImage(){vartcs=newTaskCompletionSource();WebBrowserDocumentCompletedEventHandler已完成=null;WebBrowserm_WebBrowser=new(o,s)=>{_GenerateWebSiteThumbnailImageInternal(m_WebBrowser);m_WebBrowser.DocumentCompleted-=已完成;m_WebBrowser.Dispose();tcs.TrySetResult(m_Bitmap);};m_WebBrowser.ScrollBarsEnabled=false;m_WebBrowser.ScriptErrorsSuppressed=true;m_WebBrowser.DocumentCompleted+=已完成;);返回tcs.Task;}privatevoid_GenerateWebSiteThumbnailImageInternal(WebBrowserm_WebBrowser){m_WebBrowser.ClientSize=newSize(this.BrowserWidth,this.BrowserHeight);m_WebBrowser.ScrollBarsEnabled=false;m_Bitmap=newBitmap(m_WebBrowser.Browser..Bounds.Height);m_WebBrowser.BringToFront();m_WebBrowser.DrawToBitmap(m_Bitmap,m_WebBrowser.Bounds);m_Bitmap=(Bitmap)m_Bitmap.GetThumbnailImage(ThumbnailWidth,ThumbnailHeight,null,IntPtr.Zero);}}本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除,如需转载请注明出处:
