0

我使用 rawinput 来获取触摸事件,并且只想在触摸屏幕时执行一次操作。这是一个例子。

private volatile bool running = false;
    private object runLock = new object();
    private void OnTouchOnHandler(object sender, EventArgs e)
    {
        lock (runLock)
        {
            if (!running)
            {
                MessageBox.Show("1");
                running = true;
            }
        }
    }

当我第一次触摸屏幕三四次时,我会得到几个 MessageBox。这真的很奇怪。为什么 lock 和 volatile 变量一开始不起作用?

4

1 回答 1

0

最可能的行为原因是您拥有包含bool running标志的任何对象的多个实例。

lock将阻止多个线程执行相同的代码块。大多数 UI 操作都在同一个线程上执行,因此代码将被允许重新进入同一个块(lock在同一个线程上多次获取时不会做任何事情)。在您的情况下,简单的bool标志应该足够了,而无需使用lock.

于 2012-10-03T03:51:23.053 回答