2017-03-14 12 views
0

私は自分のプログラムで唯一のミューテックスの問題に遭遇しました。これは、一度に1つのアプリケーションだけを実行できるようにするためのものです。VS15でデバッグを停止すると、ミューテックスが舞台裏で放映されますか?

私は、Visual Studio 2015でStop Debugging(shift-f5)を押すことによって、放棄されたmutex例外が発生したと考えています。これはfinallyブロックが呼び出されず、mutexが解放されなかったことを意味します。

static Mutex mutex = new Mutex(false, "APP_NAME_COMPANY"); 

    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     if (!mutex.WaitOne(TimeSpan.FromSeconds(2), false)) 
     { 
      MessageBox.Show("Application already started!", "", MessageBoxButtons.OK); 
      return; 
     } 
     try 
     { 
      //important things 
     } 

     finally 
     { 
      mutex.ReleaseMutex(); 
     } 

デバッグを停止することが原因だと思いますか?

+0

実際にあなたの質問は何ですか? – dcg

+0

@dcgデバッグを停止するとミューテックスが舞台裏で解放されますか? – Asymptote

+0

私が見ているように、それは、ビジュアルスタジオがプロセス(アプリケーション)をどのように停止するかによって異なります。もしそれが強制的に停止するなら、私は 'mutex'が解放されたとは思っていません。もしあなたがおそらく停止するようにうまく言えば、あなたのプログラムは' mutex'を解放することができます。 – dcg

答えて

1

ミューテックスは、プロセスが終了したため(「デバッグを停止して」)、オペレーティングシステムによって解放されます。 ただし、次回同じmutexを使用すると、AbandonedMutexExceptionがスローされます。これは意図的なもので、最後にミューテックスが使用されたことを通知するもので、不適切な方法でリリースされました(あなたの場合:プロセスが「デバッグを停止する」ことによって殺される)。 ただし、この例外は警告として扱うことができ、通常はmutexを後で使用することができます。

+0

アプリケーションの再起動時にコードに例外がスローされますか? – dcg

関連する問題