Я нашел следующий код в SO:
Код: Выделить всё
using var mutex = MutexAcl.Create(true, mutexId, out bool mutexCreated, securitySettings);
var hasHandle = false;
try
{
try
{
hasHandle = mutex.WaitOne(1000, false);
if (hasHandle == false)
LogError("Timeout waiting for exclusive access.");
}
catch (AbandonedMutexException)
{
hasHandle = true;
}
// do work
}
finally
{
if (hasHandle)
mutex.ReleaseMutex();
}
Зачем ждать мьютекс, если вы всегда создаете его с параметром InitialOwned = true. Разве мы не можем использовать переменную mutexCreated в таком случае?
Если я правильно понимаю, mutexCreated имеет значение true, если глобальный мьютекс не был существует, и он был создан с помощью этого вызова метода, и, поскольку изначальноOwned = true, он принадлежит потоку, а если mutexCreated имеет значение false, то он уже существовал и текущий поток не владеет это, поэтому можно с уверенностью предположить другое экземпляр уже запущен.
Я что-то упустил? Почему нам нужно ждать мьютекса, для которого у нас уже есть вызов Create?
Подробнее здесь: https://stackoverflow.com/questions/793 ... ting-on-it
Мобильная версия