Comment trouver ce Mutex en C# est acquis?

Comment puis-je trouver de mutex poignée en C# qu'un mutex est acquis?

Quand mutex.WaitOne(timeout) les délais d'attente, il retourne false. Cependant, comment puis-je trouver qu'à partir du handle de mutex? (Peut-être à l'aide de p/invoke.)

Mise à JOUR:

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
}

Actuellement, je suis en utilisant ma propre propriété IsAcquired afin de déterminer si je dois libérer un mutex. Pas indispensable, mais plus claire, serait de ne pas utiliser une copie secondaire de l'information représentée par IsAcquired de propriété, mais plutôt de demander directement le mutex s'il est acquis par moi. Depuis l'appel de mutex.ReleaseMutex() lève une exception si il n'est pas acquis par moi.

(Par acquis état, je veux dire que le mutex est dans pas signalé état quand je suis posséder le mutex.)

(EDIT: j'ai ajouté IsAcquired = false; grâce à mattdekrey post.)

InformationsquelleAutor TN. | 2010-06-10