监视器输入/释放对象时的通知

时间:2013-04-03 16:19:23

标签: c# .net

我觉得我可能会在这里重新发明轮子。这是我想要实现的目标:

使用lockMonitor.Enter锁定对象时,我希望收到通知。同样,当对象被释放时,我希望收到通知。

我正在考虑编写一个包装类,它暴露一个observable来发送通知,以及一些获取/释放锁的方法。但是,就像我提到的那样,我觉得我可能正在重做已经存在的东西。我可以用什么.NET技术来编写一个新类?

编辑: 回答一些问题: 为什么?我甚至需要知道一段代码在执行之前是否正忙。让我们假设UI上有两个按钮,A和B. A执行methodA,B执行methodB。它们都使用相同的对象来锁定/同步。当我看到某人已经执行了由同步对象实例_syncObject锁定的一段代码时,我想禁用这些按钮。我想告诉用户此功能暂时无法执行。

Monitor.TryEnter或尝试验证锁是否可用不是解决方案,因为它需要轮询并且不是通知。

void methodA()
{
lock(_syncObject)
{
...
}
}

void methodB()
{
{
lock(_syncObject)
{
...
}
}

2 个答案:

答案 0 :(得分:0)

目前尚不清楚你要做什么。 如果您想要某些线程正在执行受保护代码部分的通知, 你可以创建一组事件,所以一旦代码部分启动,你就可以触发代码正在执行的事件......最后,就在释放锁之前。

答案 1 :(得分:0)

您获得的唯一“通知”是Monitor被锁定或已解锁。例如:

   bool lockTaken;
   Monitor.Enter(lockObject, ref lockTaken);
   if(!lockTaken) Console.WriteLine("Already locked");
   else Console.WriteLine("Not already locked.");

监视器和其他同步对象用于控制线程,而不是用于通知。如果您想要发生事件的通知,请创建事件并提升它们 - 这就是事件的用途。