2017-01-20 13 views
0

Windowsフォーム上にxという変数の値を読み取るボタンがある場合、このシナリオを想像してみてください。WaitOneが呼び出された直後にManualResetEventをリセットする

 //this function runs by a thread 
    void newData() 
    { 
     manualReset.WaitOne(); 
     //clear x 
     //put new data in it 
    } 
    private void btRead_Click(object sender, EventArgs e) 
    { 
     manualReset.Reset(); 
     //read x 
     ManualReset.Set(); 
    } 

を今すぐスレッドがライン」を実行したとき、私は時間だけでボタンをクリックした場合:一方の変数とすることで、新たなデータを置くことをクリアします(タイマーを使用して)たまに実行するスレッドがありますwaitOne() "が成功したため、今回はメインUIスレッドでデータを読み取ろうとしている間にスレッドがデータをクリアするため、今回はリセットされません。それで解決策は何ですか?事前のおかげで

+0

ロックを使用するのはどうですか? – MistyK

答えて

3

lockステートメントを使用します。

ロックキーワードは、別のスレッドがクリティカルセクションにあるときに1つのスレッドがコードのクリティカル セクションに入らないことを保証します。 別のスレッドがロックされたコードを入力しようとすると、オブジェクトが解放されるまでブロック を待機します。

関連する問題