1

我有我的主要 gui 类和一些子类。有 +- 3 个线程正在从各种互联网资源和 API 网关等收集数据。

现在,在其中一个线程中,我想运行一个 webbrowser 控件,这样我就可以在我的程序中添加一些自动浏览功能。每个子线程都应该能够自行打开网络浏览器。所以我创建了第二个 c# windows 窗体,它只包含 webbrowsing 控件。

我已经在这个新线程上为 webbrowser 控件使用了 ApartmentState.STA 设置。但是,form2 没有响应。

我试图调用 Application.Run(); 从这个线程,这使得 webbrowser/form2 响应。但随后我的主线程停止运行。

所以我有点不确定如何进行。我想要的有可能吗?

4

1 回答 1

7

这应该工作

var th = new Thread(() =>
{
    WebBrowserDocumentCompletedEventHandler completed = null;

    using (WebBrowser wb = new WebBrowser())
    {
        completed = (sndr, e) =>
        {
            //Do Some work

            wb.DocumentCompleted -= completed;
            Application.ExitThread();
        };

        wb.DocumentCompleted += completed;
        wb.Navigate(url);
        Application.Run();
    }
});

th.SetApartmentState(ApartmentState.STA);
th.Start();
th.Join();

也就是说,我会使用WebClientHttpWebRequestHtmlAgilityPack一起下载和解析 html 资源

于 2012-08-21T17:14:16.053 回答