重複の可能性:
新しいスレッドの WebBrowser コントロール
次のコントロールを含む Winforms アプリケーションを開発しています。テキスト ボックス、WebBrowser コントロール、および 3 つの Richtextboxes。
このアプリの目的は、テキスト ボックスに URL を入力すると、Web ブラウザーがそのページに移動し、Web ページの HTML ソースを解析してすべてのハイパーリンクを取得し、再びそれらのハイパーリンクをフィルター処理することです。有効および無効なハイパーリンク。
現在、私は別のスレッドで Web ブラウザー コントロールを宣言しています。Web ブラウザーのナビゲート イベントが発生すると、上記のすべての解析を行うスレッドをもう 1 つ作成します。問題は、別のスレッドから呼び出しているにもかかわらず、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);
}
}