Visual Basic に Visual Studio 2013 を使用していますが、マルチスレッド プログラムのデバッグに苦労しています。
私は BackgroundWorker を使用していますが、これは私が考えている方法とは異なるように見えます。
と呼ばれる ArrayList の最初のエントリのみを処理した後にプログラムが停止する理由がわかりませんarFileName
。
次のコードでは、BackgroundWorker1.DoWork プロシージャのFor Each
ステートメントが全体を反復処理できません。arFileName
Private Sub btnRun_Click(sender As Object, e As EventArgs) Handles btnSelectCsv.Click
'arFileName is ArrayList and it has enormous counts
ProgressBar1.Maximum = arFileName.Count
Me.Cursor = Cursors.WaitCursor
'Do background
BackgroundWorker1.RunWorkerAsync()
Me.Cursor = Cursors.Arrow
MessageBox.Show("Finished!", "info", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
Dim arNotFoundFile As New ArrayList
'Confirm file exists
For Each filename As String In arFileName ' Here!
If Not IO.File.Exists(filename) Then
arNotFoundFile.Add(filename)
ProgressBar1.Value = ProgressBar1.Value + 1
End If
Next
End Sub