2013-10-23 105 views
-2

爲什麼這個鎖不起作用?使用鎖定()C#

CheckActivity是從鼠標/鍵盤Windows鉤子生成的。任何提示如何使這個鎖工作?

private void CheckActivity(KeyboardMouseKey k) 
    { 
     lock(this) 
     { 
      if (_map) 
      { 
       _map = false; 
       if (openFileDialogSelectAudio.ShowDialog() == DialogResult.OK) 
        MapSound(k, openFileDialogSelectAudio.FileName); 
      } 
      else 
      { 
       ///play 
       foreach (var m in _mappings.Where(m => m.Key.Equals(k))) 
        m.Value.Play(); 
      } 
      UpdateGui(); 
     } 
    } 
+17

你說的不工作呢?是否有編譯器錯誤,運行時異常,意外輸出或其他意外行爲? –

回答

2

您正在使用lock(this)

如果檢查活動被稱爲不同的對象,鎖(這)不會阻止爲確保只有一個線程執行CheckActivity(這似乎是鎖的目的)靜態對象

使用lock使其工作。

例子:

private static readonly object lockObj = new object(); 
... 
lock(lockObj) 
{ 
    .... 


} 
+3

絕對沒有跡象表明這是問題所在,而且你也沒有給出它可能成爲問題的情況。 –

+0

這個答案是正確的,抱歉沒有指出具體的錯誤,但它只是鎖是「不鎖定」 – eried