我需要运行一个报告,获取学生测试的摘要,其中显示通过或失败的细节。当点击cmd_Start时,它会在每个学生的Backgroundworker上运行(我只是想以多线程的形式运行,并且我发现有人建议使用backgroundworker),并在完成所有计算后弹出一个带有结果的消息框。我在其他例子上复制和编辑了一些代码,但我不知道应该在代码上标记问号。其他的想法也是受欢迎的。VB.net Backgroundworker传递参数和返回值
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
不能随意添加参数的事件处理程序,发件人和e BackgroundWorker的提供。既然你只有一个变量可以传递,你可以简单地将它传递给RunWorkerAsync,并在CLng(e.Argument)的事件处理程序中再次检索它。 –