此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Monitor.TryEnter 方法 (Object, Int32, Boolean%)

2013/12/13

在指定的毫秒数中,尝试获取指定对象上的排他锁,并自动设置一个值,指示是否得到了该锁。

Namespace:  System.Threading
程序集:  mscorlib(位于 mscorlib.dll 中)

public static void TryEnter(
	Object obj,
	int millisecondsTimeout,
	ref bool lockTaken
)

参数

obj
类型: System.Object
在其上获取锁的对象。
millisecondsTimeout
类型: System.Int32
等待锁所需的毫秒数。
lockTaken
类型: System.Boolean %
尝试获取锁的结果,通过引用传递。输入必须为 false。如果已获取锁,则输出为 true;否则输出为 false。即使在尝试获取锁的过程中发生异常,也会设置输出。

异常条件
ArgumentException

lockTaken 的输入是 true

ArgumentNullException

obj 参数为 null

ArgumentOutOfRangeException

millisecondsTimeout 为负且不等于 Infinite

如果 millisecondsTimeout 参数等于 Infinite,则此方法等效于 Enter(Object)。如果 millisecondsTimeout 等于 0,则此方法等效于 TryEnter(Object)

如果由于引发了异常而未采用锁,则在此方法结束后,为 lockTaken 参数指定的变量将为 false。这使程序在所有情况下都能够确定是否有必要释放锁。

说明注意:

使用 Monitor 锁定对象(即引用类型)而不是值类型。有关详细信息,请参见 Enter 和概念主题 [33FE4AEF-B44B-42FD-9E72-C908E39E75DB]

以下代码示例演示用于 TryEnter(Object, Boolean) 方法重载的基本模式。此重载始终为传递给 ref 参数(在 Visual Basic 中为 ByReflockTaken 的变量设置值,即使该方法会引发一个异常,因此该变量的值是一种测试是否需要释放锁的可靠方法。


bool acquiredLock = false;

try
{
    Monitor.TryEnter(lockObject, 500, ref acquiredLock);
    if (acquiredLock)
    {

        // Code that accesses resources that are protected by the lock.

    }
    else
    {

        // Code to deal with the fact that the lock was not acquired.

    }
}
finally
{
    if (acquiredLock)
    {
        Monitor.Exit(lockObject);
    }
}


Windows Phone OS

受以下版本支持: 8.0, 7.1

Windows Phone

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft