2011-01-21 7 views
4

私はMonitor class example on the msdn websiteに基づいて次のコードを持っています。SynchronizationLockExceptionを回避するにはどうすればよいですか?

private void WebRefresh_Click(object sender, EventArgs e) 
    { 
    if (WebRefresh.Enabled)//Only call from button 
    { 
     if (System.Threading.Monitor.TryEnter(deployIsRunning)) 
     { 

       refreshWebVersion(); 

       System.Threading.Monitor.Exit(deployIsRunning); 
     } 
    } 
    else 
    { 
     MessageBox.Show("You cannot refresh during a deploy"); 
    } 
} 

コードがMonitor.ExitにSynchronizationLockExceptionをスロー()エラーメッセージで呼び出し:「オブジェクトの同期方法は、コードの非同期ブロックから呼び出されました。」エラーの説明は私が所有していないミューテックスをリリースしようとしたが、TryEnterが成功しない限りExitが呼び出されるコードブロックに入ることができないということです。このエラーを取り除くにはどうしたらいいですか?

答えて

8

私の推測では、deployIsRunningは、タイプboolまたは他の値タイプの変数です。 TryEnterExitにあなたのコールは値を入力し、毎回新しいオブジェクトを作成します。

基本的には、ロックの参照型変数のみを使用します。

関連する問題