1

私は.NETでのスレッド化に非常に慣れておらず、Javaでのスレッド化への露出は限られています。要するに、私はSystem.Windows.Forms.Timerオブジェクトを持つフォームを持っています。タイマーは1000msごとに刻みます。イベントハンドラーは、boolクラス変数(つまり、processingResponseFiles)をチェックして、要求ファイルを処理する現在の操作が処理中であるかどうかを判断するだけです。進行中でない場合は、リクエストファイルを処理する必要があります。それ以外の場合は、何もしません。

このProcessRequestFilesメソッドはリクエストを確認してから、BackgroundWorkerを実行して作業を実行します。私が苦労している問題は、ProcessingRequestFilesメソッドの最初のステートメントでtrueに割り当てているにもかかわらず、processingResponseFilesの値が常にfalseであるということです。メソッドで設定しているのに、processingResponseFilesの値が常にfalseである理由を誰かに教えてもらえますかProcessRequestFile()

このメソッドが複数回実行されないように保護する必要があります。

private void timerRequestTimer_Tick(object sender, EventArgs e)
{
    if (!processingResponseFiles)
    {
        ProcessRequestFile();                
    }

private void ProcessRequestFile()
{
    processingResponseFiles = true;

   // Process Request Files
   // If request type is Synchronize Customers
   // Run thread that synchronizes customers
   // If request type is Synchronize Items
   // Run thread that synchronizes items

   processingResponseFiles = false;
}
4

1 に答える 1

2

あまり明確ではなく、コメントアウトされたものが多すぎますがfalse、BackgroundWorker.RunWorkerCompletedイベントハンドラーでフラグをリセットする必要があることは明らかです。そうして初めて、仕事が完了したことがわかります。または、BackgroundWorker.IsBusyプロパティを使用します。

于 2012-09-28T20:59:25.337 に答える