0

rawinput を使用してタッチ イベントを取得し、画面に触れたときに 1 回だけ何かを実行したいと考えています。これは一例です。

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

最初の 3 ~ 4 回画面に触れると、いくつかの MessageBox が表示されます。それは本当に奇妙です。ロック変数と揮発変数が最初に機能しないのはなぜですか?

4

1 に答える 1

0

bool runningフラグを含むオブジェクトの複数のインスタンスがあるという動作の最も可能性の高い理由。

lock複数のスレッドが同じコードブロックを実行するのを防ぎます。ほとんどの UI 操作は同じスレッドで実行されるため、コードは同じブロックに再入力できます (lock同じスレッドで複数回取得された場合は何も実行されません)。あなたの場合、boolを使用せずに単純なフラグで十分lockです。

于 2012-10-03T03:51:23.053 に答える