我使用.NET WebBrowser来呈现html页面并将其保存为位图(从另一个stackoverflow post获取代码)。问题是实际启动Web浏览器的线程永远不会关闭。
当StartBrowser方法完成时,线程应该关闭,但它永远不会,因为Application.Run永远不会结束。
我的问题是:在WebBrowser完成呈现页面并保存位图后如何关闭应用程序?添加Application.Exit();
在DocumentCompleted事件中,似乎没有效果。
代码:
public class DotNetRenderer : IHtmlRenderer
{
static Bitmap bmp;
Thread th;
public void initializeRenderer()
{
}
public Bitmap renderHtml(string htmlContent)
{
th = new Thread(() => StartBrowser(htmlContent));
th.SetApartmentState(ApartmentState.STA);
th.Start();
th.Join();
return bmp;
}
public static void StartBrowser(string source)
{
var webBrowser = new WebBrowser();
webBrowser.ScrollBarsEnabled = false;
webBrowser.DocumentCompleted +=
webBrowser_DocumentCompleted;
webBrowser.DocumentText = source;
Application.Run();
}
static void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = (WebBrowser)sender;
bmp = new Bitmap(webBrowser.Width, webBrowser.Height);
webBrowser.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height));
Application.ExitThread();
}
}
Application.ExitThread()做了我想要的,但现在我不知道为什么webBrowser的宽度和高度总是(250,250),无论输入HTML是什么。