掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ウエイト(スリープ)をする方法 (ID:143106)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 作業A WebBrowser1.Navigate(New Uri("http://yahoo.co.jp")) > System.Threading.Thread.Sleep(2000) > 作業B WebBrowser1.Navigate(New Uri("http://google.co.jp")) > System.Threading.Thread.Sleep(2000) Navigate の指示を 2 回送っても、それらが即座に処理されるわけではありません。 コントロールに対する操作は通常、End Sub や Return に到達した後で反映されます。 WebBrowser への「指示」は即座に行われていますが、メインスレッドが 作業している間や Sleep 中は、コントロールの作業も止まってしまいますので、 HTML の読み込みなども行われないというわけです。結果として、 4 秒待機したあとでブラウザが開かれたように見えるというわけです。 このような事情もあり、そもそも Sleep は作業スレッドから使う事はあっても、 画面をもつメインスレッドから呼び出すべき物ではありません。 Sleep 中は処理が完全に停止しますので、画面の再描画も行われませんし、 データを受け取ることや、マウス操作やキー入力なども 一切できなくなってしまいます。 逆に言えば、作業スレッド内からであれば Sleep を利用できます。 VB2005 以降であれば、BackgrondWorker を利用するのが楽でしょう。 'ボタンクリックでは、作業スレッドを起動するだけ Private Sub Button1_Click( _ ByVal sender As Object, ByVal e As EventArgs _ ) Handles Button1.Click BackgroundWorker1.WorkerReportsProgress = True BackgroundWorker1.RunWorkerAsync() End Sub '下記は、作業スレッド内で行われる処理 Private Sub BackgroundWorker1_DoWork( _ ByVal sender As Object, _ ByVal e As System.ComponentModel.DoWorkEventArgs _ ) Handles BackgroundWorker1.DoWork '作業Aをメインスレッドに依頼 BackgroundWorker1.ReportProgress(0, "http://yahoo.co.jp") System.Threading.Thread.Sleep(2000) '作業スレッドを2秒間待機 '作業Bをメインスレッドに依頼 BackgroundWorker1.ReportProgress(0, "http://google.co.jp") System.Threading.Thread.Sleep(2000) '作業スレッドを2秒間待機 End Sub '下記はメインスレッド側 Private Sub BackgroundWorker1_ProgressChanged( _ ByVal sender As Object, _ ByVal e As System.ComponentModel.ProgressChangedEventArgs _ ) Handles BackgroundWorker1.ProgressChanged '作業スレッドから依頼された URL を表示 WebBrowser1.Navigate(CStr(e.UserState)) End Sub Private Sub BackgroundWorker1_RunWorkerCompleted( _ ByVal sender As Object, _ ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs _ ) Handles BackgroundWorker1.RunWorkerCompleted MsgBox("作業が終了しました", vbInformation) End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.