-2

このロックが機能しないのはなぜですか?

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();
        }
    }
4

1 に答える 1

2

を使用してlock(this)います。

Check Activity が異なるオブジェクトで呼び出された場合、lock(this) は、1 つのスレッドのみが CheckActivity を実行していることを確認することを妨げません (これがロックの目的のようです)。

lock静的オブジェクトで使用して機能させます。

例:

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


 }
于 2013-10-23T06:39:27.697 に答える