可能重复:
新线程中的 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);
}
}