2

可能重复:
新线程中的 WebBrowser 控件

我正在开发一个 Winforms 应用程序,其中包含以下控件。一个文本框、WebBrowser 控件和 3 个 Richtextbox。

这个应用程序的目的是,当我在文本框中输入 URL 时,网络浏览器应该将我导航到该页面,然后我将解析网页的 HTML 源以获取所有超链接,然后我将再次过滤这些超链接到有效和无效的超链接。

到目前为止,我正在另一个线程中声明 Web 浏览器控件,并且当 Web 浏览器的导航事件触发时,我将再创建一个线程来执行我上面提到的所有解析内容。问题是当 Web 浏览器加载网页时应用程序变得无响应,即使我是从单独的线程调用它。

我们有解决方法吗?

这是我为 Web 浏览器控制创建单独线程的代码。

Thread t2 = null;

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
        if (e.KeyChar == (char)13)
        {
            if((textBox1.Text.StartsWith("www") || textBox1.Text.StartsWith("WWW")))
            {
               textBox1.Text = textBox1.Text.Insert(0,"http://");

            }
            if (!(textBox1.Text.EndsWith(".html") || textBox1.Text.EndsWith(".htm")))
            {
                textBox1.Text = textBox1.Text + "/";
            }
            t2 = new Thread(new ParameterizedThreadStart(ActivateBrowser));
            t2.IsBackground = true;
            t2.SetApartmentState(ApartmentState.STA);
            t2.Start(textBox1.Text);
        }
    }

    public void ActivateBrowser(Object URL)
    {
        String url = (string)URL;
        WebBrowserNavigation(url);            
    }

    public delegate void PassURLDelegate(string URL);

    public void WebBrowserNavigation(string URL)
    {
        if (webBrowser1.InvokeRequired)
        {
            this.BeginInvoke(new PassURLDelegate(WebBrowserNavigation), new object[] { URL });
        }
        else
        {
            webBrowser1.Navigate(URL);
        }
    }
4

0 回答 0