Como descobrir que o Mutex em C # é adquirido?

Como posso descobrir do identificador mutex em C # que um mutex é adquirido?

Quandomutex.WaitOne(timeout) timeouts, ele retornafalse. No entanto, como posso encontrar isso no identificador mutex? (Talvez usando p / invoke.)

ATUALIZAR:

public class InterProcessLock : IDisposable
{
    readonly Mutex mutex;

    public bool IsAcquired { get; private set; }

    public InterProcessLock(string name, TimeSpan timeout)
    {
        bool created;
        var security = new MutexSecurity();
        security.AddAccessRule(new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.Synchronize | MutexRights.Modify, AccessControlType.Allow));
        mutex = new Mutex(false, name, out created, security);
        IsAcquired = mutex.WaitOne(timeout);
    }

    #region IDisposable Members

    public void Dispose()
    {
        if (IsAcquired)
        {
            mutex.ReleaseMutex();
            IsAcquired = false;
        }
    }

    #endregion
}

Atualmente, estou usando minha própria propriedadeIsAcquired para determinar se devo liberar um mutex. Não essencial, mas mais claro, seria não usar uma cópia secundária das informações representadas porIsAcquired antes de perguntar diretamente ao mutex se ele é adquirido por mim. Desde que ligoumutex.ReleaseMutex() lança uma exceção se não for adquirida por mim.

(Poradquirido estado, quero dizer que o mutex está emnão sinalizado estado quando estoupossuir o mutex.)

(EDIT: eu adicioneiIsAcquired = false; graças aPublicação de mattdekrey.)

questionAnswers(7)

yourAnswerToTheQuestion