C#のWinFormでWebBrowserオブジェクトでサイトを読み込んで、htmlを解析してlinkのURLをFormのListViewに表示させるフォームを作っています。
以下のようにサイトの読み込みが完了したらDocumentCompleted()が実行されるようになっています。
C#
1public partial class Form_main : Form { 2 private WebBrowser wb = new WebBrowser(); 3 private ListView listView1 = new ListView(); 4 5 public main() { 6 InitializeComponent(); 7 8 // サイト読み込みが完了したらwebBrowser_DocumentCompletedを実行する 9 wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted); 10 } 11 12 // サイト読み込み完了後の処理 13 private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { 14 // HtmlAgilityPackを使ってhtmlをパース 15 string html = in_wb.Document.Body.OuterHtml; 16 HtmlAgilityPack.HtmlDocument hDoc = new HtmlAgilityPack.HtmlDocument(); 17 hDoc.LoadHtml(html); 18 19 // aタグのhrefをlistView1にリスト化する 20 foreach (HtmlAgilityPack.HtmlNode node in hDoc.DocumentNode.SelectNodes("//a/@href")) { 21 string url = node.Attributes["href"].Value; 22 ListView1.items.Add(url); 23 } 24 } 25} 26コード
しかしサイトが読み込み完了するまでListViewは更新されませんし、フォームのGUI自体が固まって操作ができません。
そこでWebBrowserでのサイト読み込み処理を別スレッドにして読み込む度にListViewにlinkのURLを追加していきたいのですが、どのような処理にすれば良いのでしょうか?
await/asyncまたはthreadクラスを使うようなのですがなかなか理解できる解説サイトが見つからずこちらで質問させて頂きました。
ちなみにWebBrowserのスレッドはバックグラウンドで行いたいです。
Formを閉じたらWebBrowserのスレッドが途中でも終了を待たずに閉じる、などが可能であればいいです。
お手数ですがどうぞよろしくお願い致します。
開発環境:
Windows10 64bit VisualStudio2015 .NetFramework4.0以上
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。