Первая попытка — попробуйте открыть существующий:
Код: Выделить всё
private void AttemptOne()
{
Mutex myMutex;
if (!Mutex.TryOpenExisting("Mutex Name", out myMutex))
myMutex = new Mutex(false, "Mutex Name");
try
{
myMutex.WaitOne(3000);
// code
}
catch { }
finally
{
myMutex.ReleaseMutex();
// myMutex.Dispose(); - should I call that or it will be called automatically when returning from method?
}
}
Код: Выделить всё
private void AttemptTwo()
{
using (Mutex mutex = new Mutex(false, "Mutex Name"))
{
try
{
mutex.WaitOne(3000);
// code
}
catch { }
finally { myMutex.ReleaseMutex(); }
}
}
- которые попытаться использовать?
Предположим, что у меня есть фоновый процесс с созданным мьютексом, и в то же время основной процесс пытается выполнить некоторую работу, которую следует заблокировать до завершения фонового процесса. Если фоновый процесс создал собственный мьютекс, стоит ли мне попытаться его открыть?
Или создать новый мьютекс в основном потоке с тем же именем?
В чем разница между этими попытками? - должен ли я вызывать Dispose() при первой попытке ?
Или просто предположим, что Mutex будет удален при возврате метода? Будет ли он тогда удален? - Я предполагаю, что во второй попытке Mutex будет удален (как его IDisposable) после завершения использования(). Я прав?
Подробнее здесь: https://stackoverflow.com/questions/217 ... vs-new-one