本スレッドでの処理をbackgroundworkerで別スレッドで実行します。
別スレッドの処理結果を本スレッドのテキストボックスに反映させたいのですがうまくいきません。
まず、backgroundworker1_DoWorkでの処理の結果をBackgroundWorker1_ProgressChangedで受け取れていないみたいです。
どのようにすれば良いでしょうか。
よろしくお願いいたします。
Public Class bean Private no As Integer Private result As String Public Property No As Integer Get Return no End Get Set(value As Integer) no = value End Set End Property Public Property Result As String Get Return result End Get Set(value As String) result = value End Set End Property End Class Public Class clsMain Public Function prepare() As List(Of bean) Dim lst As New List(Of bean) Dim b As bean = Nothing b = New bean b.No = 1 lst.Add(b) ・ ・ Return lst End Function Public Sub check(lst As List(Of bean)) cal() ・ ・ End Sub End Class Public Class frmMain Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click BackgroundWorker1.WorkerSupportsCancellation = True BackgroundWorker1.WorkerReportsProgress = True BackgroundWorker1.RunWorkerAsync() End Sub Private Sub backgroundworker1_DoWork( ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) _ Handles BackgroundWorker1.DoWork Dim lst As List(Of bean) While True If BackgroundWorker1.CancellationPending Then Exit Sub End If Dim CLSMain As clsMain = New clsMain lst = CLSMain.prepare() CLSMain.check(lst) BackgroundWorker1.ReportProgress(0, lst) Threading.Thread.Sleep(60000) End While e.Result = lst End Sub Private Sub BackgroundWorker1_ProgressChanged( ByVal sender As Object, ByVal e As ProgressChangedEventArgs) _ Handles BackgroundWorker1.ProgressChanged Dim lst As List(Of bean) = DirectCast(e.UserState, List(Of bean)) End Sub Private Sub BackgroundWorker1_RunWorkerCompleted( ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) _ Handles BackgroundWorker1.RunWorkerCompleted If e.Cancelled = True Then 'BackgroundWorker1.CancelAsync() Else Dim lst As List(Of bean) = DirectCast(e.Result, List(Of bean)) For Each r As bean In lst Dim rResult As Control() = Controls.Find("txtBox" & r.No, True) CType(rResult(0), TextBox).Text = r.Result Next End If End Sub Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click 'ストップボタンでBackgroundWorkerを停止させたい BackgroundWorker1.CancelAsync() End Sub End Class
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/14 05:17
2016/08/14 06:12
退会済みユーザー
2016/08/14 13:22
退会済みユーザー
2016/08/15 13:39