【问题标题】:Using lock( ) C# [closed]使用 lock() C# [关闭]
【发布时间】:2013-10-23 06:37:25
【问题描述】:

为什么这个锁不起作用?

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

【问题讨论】:

  • 不工作是什么意思?是否存在编译器错误、运行时异常、意外输出或其他意外行为?

标签: c# multithreading user-interface thread-safety


【解决方案1】:

您正在使用lock(this)

如果在不同的对象上调用 Check Activity,lock(this) 不会阻止确保只有一个线程正在执行 CheckActivity(这似乎是锁定的目的)

在静态对象上使用lock 使其工作。

例子:

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


 }

【讨论】:

  • 绝对没有迹象表明这是问题所在,您也没有解释可能是问题所在的情况。
  • 这个答案是正确的,很抱歉没有指出具体错误,但只是锁“未锁定”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
  • 2010-09-13
  • 1970-01-01
  • 2012-04-05
  • 2016-12-18
  • 2010-11-23
相关资源
最近更新 更多