Какое из приведенных ниже выражений Mutex идеально предотвращает множественные экземпляры приложения .Net и в чем разница?

Обычно я вижу эти два фрагмента кода повсюду. Оба варианта работают и в моем случае, но чего мне следует придерживаться?

Случай 1:

bool isNew = false;
Mutex mutex = new Mutex(true, "MyApp_Mutex", out isNew);
if (!isNew)
{
    MessageBox.Show("already running.", "Multiple Instances Not Allowed",
                                        MessageBoxButtons.OK, 
                                        MessageBoxIcon.Exclamation);
    return;
}

Случай 2:

Mutex mutex = new Mutex(false, "MyApp_Mutex"))            
if (!mutex.WaitOne(0, false))
{
    MessageBox.Show("already running.", "Multiple Instances Not Allowed", 
                                        MessageBoxButtons.OK, 
                                        MessageBoxIcon.Exclamation);
    return;
}
  1. Какой из двух вариантов является идеальным для предотвращения множественных случаев?

  2. В чем разница?

  3. Более того, я вижу такие коды:

     // если не вернуть {
    mutex.ReleaseMutex ();
    GC.Collect ();
     //application.Run ();
    GC.KeepAlive (мьютекс);
     

при втором методе, но никогда при первом. Почему это так? Или я ошибся?

В основном это связано с правильным пониманием используемых параметров и методов. Буду признателен, если кто-нибудь сможет вкратце описать это, я понимаю не наполовину при чтении документации msdn ..

9
задан nawfal 24 August 2011 в 16:04
поделиться