Monitor.TryEnter Method (Object, Int32)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Attempts, for the specified number of milliseconds, to acquire an exclusive lock on the specified object.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- obj
- Type: System.Object
The object on which to acquire the lock.
- millisecondsTimeout
- Type: System.Int32
The number of milliseconds to wait for the lock.
| Exception | Condition |
|---|---|
| ArgumentNullException | The obj parameter is null. |
| ArgumentOutOfRangeException | millisecondsTimeout is negative, and not equal to Infinite. |
If the millisecondsTimeout parameter equals Infinite, this method is equivalent to Enter. If millisecondsTimeout equals 0, this method is equivalent to TryEnter.
Note: |
|---|
Use Monitor to lock objects (that is, reference types), not value types. For details, see Enter and the conceptual topic Monitors. |
Version Notes
Windows Phone
When a user navigates away from a Windows Phone application, the application is typically put into a dormant state. When the user returns to a dormant application, the application automatically resumes. If the application is put into a dormant state while this API is being used, the API will not complete as expected. Applications should be designed to handle this possibility. For more information about the Windows Phone execution model, see Execution Model for Windows Phone.The following example demonstrates how to use the TryEnter(Object, Int32) method overload with a time-out. This code is part of a larger example provided for the Enter method. The example compares this overload of TryEnter with the overload that does not have a time-out; using the time-out significantly increases the percentage of times that TryEnter succeeds in acquiring the lock.
// Try to add an element to the queue: Add the element to the queue // only if the lock becomes available during the specified time // interval. public bool TryEnqueue(T qValue, int waitTime) { // Request the lock. if (Monitor.TryEnter(m_inputQueue, waitTime)) { try { m_inputQueue.Enqueue(qValue); } finally { // Ensure that the lock is released. Monitor.Exit(m_inputQueue); } return true; } else { return false; } }
Note: