|
■No12535 (四十 さん) に返信
> プログラム起動後、一定時間間隔で(例えば10秒間隔)で、とにかく検索ロジックを
> 走らせたいと考えています。検索ロジックの中の処理が何秒かかるか不明なので、
> 早い場合もあれば遅い場合もあります。
検索スレッドと、メインスレッドの関係が良く分かりませんでした。
(1) 10秒ごとに、メインスレッドがワーカースレッドの検索状況を拾い上げる。
(2) ワーカスレッドが、10秒ごとに進捗をメインスレッドに通知する。
(3) 一つの検索処理は最大10秒で打ち切られ、次の検索処理が開始される。
(4) その他の処理パターン
Imports System.ComponentModel
Class Form1
Sub Form1_Load(ByVal s As Object, ByVal e As EventArgs) Handles Me.Load
BackgroundWorker1.WorkerReportsProgress = False
BackgroundWorker1.RunWorkerAsync()
BackgroundWorker2.WorkerReportsProgress = True
BackgroundWorker2.RunWorkerAsync()
End Sub
Private Sub DoWork1(ByVal s As Object, ByVal e As DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
Threading.Thread.Sleep(5000)
e.Result = Now.ToString("hh:mm:ss.ffff")
End Sub
Private Sub Completed1(ByVal s As Object, ByVal e As RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
ListBox1.Items.Add(e.Result)
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub DoWork2(ByVal s As Object, ByVal e As DoWorkEventArgs) _
Handles BackgroundWorker2.DoWork
Dim bgw As BackgroundWorker = DirectCast(s, BackgroundWorker)
Do Until bgw.CancellationPending
Threading.Thread.Sleep(3000)
bgw.ReportProgress(0, Now.ToString("hh:mm:ss.ffff"))
Loop
End Sub
Private Sub ProgressChanged2(ByVal s As Object, ByVal e As ProgressChangedEventArgs) _
Handles BackgroundWorker2.ProgressChanged
ListBox2.Items.Add(e.UserState)
End Sub
End Class
|