0

以下のアプリの最初のインスタンスの実行中に、「取得済み」と出力されます。ただし、2番目のものを開始すると、1分間待機します。その間にEnterキーを押して「最初のインスタンス」を離れると、2番目のインスタンスで「放棄されたミューテックスによる待機完了」例外がスローされます。スレッドを取得することになっていませんか?! (最初のインスタンスはすでにそれをリリースしましたか?!)

   using (var m1 = new Mutex(false, "consoleapp"))
        {

            if (!m1.WaitOne(60000, false))
            {
                Console.WriteLine("It is already runnig");

            }
            else
            {
                Console.WriteLine("Acquired");
                Console.ReadLine();
            }

        }
4

1 に答える 1

2

else ブロックでm1.Release()を呼び出して、ミューテックスの所有権を明示的に解放する必要があります。それ以外の場合は破棄されますが解放されないため、 WaitOne()によって例外がスローされます[Hristo のコメント]

于 2016-07-09T17:38:19.630 に答える