事件结束后关闭申请

时间:2015-06-04 07:22:07

标签: c# multithreading

我使用.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是什么。

0 个答案:

没有答案