2011-01-21 114 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"); 
    } 
} 

的代碼拋出SynchronizationLockException上Monitor.Exit()一個錯誤消息調用:「對象同步方法是從代碼不同步的塊被稱爲」錯誤的解釋是我試圖釋放一個我沒有的互斥體,但是我不能輸入代碼塊Exit,除非TryEnter成功。我如何刪除此錯誤?

回答

8

我的猜測是deployIsRunningbool或其他一些其他值類型的變量。您撥打TryEnterExit的電話將打開該值,每次創建一個新對象。

基本上,只能使用一個引用類型變量的鎖。