Export (0) Print
Expand All

Monitor.TryEnter Method (Object, Int32)

Attempts, for the specified number of milliseconds, to acquire an exclusive lock on the specified object.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

public static bool TryEnter(
	Object obj,
	int millisecondsTimeout
)

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.

Return Value

Type: System.Boolean
true if the current thread acquires the lock; otherwise, false.

ExceptionCondition
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.

NoteNote:

Use Monitor to lock objects (that is, reference types), not value types. For details, see Enter and the conceptual topic Monitors.

Version Notes

Silverlight for Windows Phone Silverlight for 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;
   }
}


Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.

Community Additions

ADD
Show:
© 2014 Microsoft