Обычно я вижу эти два фрагмента кода повсюду. Оба варианта работают и в моем случае, но чего мне следует придерживаться?
Случай 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;
}
Какой из двух вариантов является идеальным для предотвращения множественных случаев?
В чем разница?
Более того, я вижу такие коды:
// если не вернуть {
mutex.ReleaseMutex ();
GC.Collect ();
//application.Run ();
GC.KeepAlive (мьютекс);
при втором методе, но никогда при первом. Почему это так? Или я ошибся?
В основном это связано с правильным пониманием используемых параметров и методов. Буду признателен, если кто-нибудь сможет вкратце описать это, я понимаю не наполовину при чтении документации msdn ..