私は VB.Net で作業しており、一方のスレッドが終了するのを待っている間、一方のスレッドを一時停止する必要があります。
私は非常に近い質問を見てきましたが、それを理解できないようです(そして、バックグラウンドワーカーの一時停止/再開ループの投稿にコメントできませんでした)
私のシナリオは、2 人のバックグラウンド ワーカーがいるというものです。Worker1 は、ファイルを処理する Worker2 に fileNames を渡しています。Worker2 が終了していない場合は、Worker1 を一時停止する必要があります。つまり、Worker1 は Worker2 が終了した後にのみ次の fileName を解放します
これを行う方法についてのアイデアはありますか?
@ user1666788 からのコメントの後の作業コード
以下のコードは、先に進む前に一方が他方の作業を終了するまで待機する必要がある、上記の 2 つのバックグラウンド ワーカーのシナリオ用です。
Dim isFinished as boolean
Dim currentFiile as integer
Private Sub StartWork_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StartWork.Click
bgWorker1.WorkerSupportsCancellation = True
isFinished = True
currentFile = 0
bgWorker1.RunWorkerAsync()
End Sub
Private Sub bgWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker1.DoWork
If isFinished = False Then
bgWorker1.CancelAsync()
End If
isFinished = False
For i = currentFile To fileNames.Count - 1
Dim fileName As String = fileNames(i)
LoadRules(myValidator.GetFileType(fileName))
If i = fileNames.Count Then bgWorker1.CancelAsync()
Exit Sub
Next
End Sub
Private Function LoadRules(ByVal fileType As String) As Boolean
' Function to load some rules for file processing
Try
' Start Thread for actual file processing using bgworker2
bgWorker2.WorkerSupportsCancellation = True
bgWorker2.RunWorkerAsync()
Return True
Catch ex As Exception
End Try
End Function
Private Sub bgWorker2_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker2.DoWork
Try
' Do your thing here
' for x is 0 to 1million
' next
' Mark is finished to true
isFinished = True
' Set currentFile
currentFile += 1
' The bgWorker1 is restarted when bgWorker2 has finished.
' Note however that bgWorker1 will "Continue" where it left off due to the property "currentFile"
bgWorker1.RunWorkerAsync()
'++++++++++++++++++++++++++++++++++++
Catch ex As Exception
End Try
End Sub
ほらね。期待どおりに動作します。ファイルが完全に作成された後に別のプロセスを開始できるように、ファイルをディスクに書き込む進行状況を「監視」する方法を理解する必要があります.....