メソッドにアクセスする複数のスレッドがあります。
このメソッドは、スレッドの実行時にフォームの進行状況バーを更新します。
そのメソッドは、スレッドがファイルを完了するにつれて、処理されたファイルの進行状況を示す Windows フォームの進行状況バーを更新します。
デッドロックを回避するために、そのメソッドをどのように管理しますか。ロックに問題があります。間違っているのか、この場合はロックする必要があるのか わかりません。
public void myWorkerClass()
{
int amountToScan = 4;
lblcount.BeginInvoke(
((Action)(() => lblcount.Text = "Files Checked " + atPDFNumber.ToString() + " of " + amountToScan.ToString())));
decimal percentageComplete = ((decimal)atPDFNumber / (decimal)amountToScan) * 100;
backgroundWorker1.ReportProgress((int)percentageComplete);
}
何が起こるかというと、最後の行で、「この操作はすでに OperationCompleted が呼び出されており、それ以上の呼び出しは無効です」というメッセージが表示されます。
私は、最初のスレッドまたはそのようなものによって既に破棄されたものを開いていると思います。
これは、複数のスレッドで進行状況バーを使用する良い方法ですか (正しいアイデアまたは原則を持っていますか)、それとも私のコードに小さなエラーがありますか?
この質問を他の人にとって価値のあるものにしたいのは、複数のスレッドによってアクセスされているメソッド内でグローバル変数にアクセスする方法について、この質問に答えることです。私はそれがこの質問の方向性だと思っています。