合格または不合格の詳細を示す生徒のテストの概要を取得するレポートを実行する必要があります。 cmd_Startをクリックすると、Backgroundworkerで実行されます(私はマルチスレッドとして実行したい、人々はバックグラウンドワーカーを使うことを提案しています)。すべての計算が完了すると結果がメッセージボックスにポップアップ表示されます。私は他の例でいくつかのコードをコピーして編集しましたが、私は疑問符を付けたコードに何を置くべきか分かりません。他のアイデアも大歓迎です。VB.netバックグラウンド渡しのパラメータと戻り値
Dim Passed as int32= 0
Dim Failed as int32 = 0
Dim Total as int32 = 0
Private Sub cmd_Start_Click(sender As Object, e As EventArgs) Handles cmd_Start.Click
Passed= 0
Failed = 0
Total = 0
For i as int32 = 0 to ubound(StudentIDAry)
Dim worker As New System.ComponentModel.BackgroundWorker
AddHandler worker.DoWork, ????? CountAverageScore(????,????, StudentIDAry(i))
AddHandler worker.RunWorkerCompleted, AddressOf HandleThreadCompletion
worker.RunWorkerAsync()
Next
MsgBox("Total Counted: " & Total & vbcrlf & "Passed Count: " & Passed & vbcrlf & "Failed Count: " & Failed)
End Sub
Private Sub CountAverageScore(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs, ByVal StudentID As Long)
Dim stroutput As String = e.Argument.ToString
..........
..........
e.Result = stroutput
End Sub
Private Sub HandleThreadCompletion(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs)
Dim return_value As String = e.Result.ToString
If cint(return_value)>=50 Then
Passed = Passed + 1
Else
Failed = Failed + 1
End If
Total = Total + 1
End Sub
を使用しています。渡す変数は1つだけなので、単にRunWorkerAsyncに渡して、CLng(e.Argument)を使ってイベントハンドラで再度取得することができます。 –