我觉得我可能在这里重新发明轮子。这是我想要实现的目标:
当使用lock
or锁定对象时Monitor.Enter
,我想收到通知。同样,当对象被释放时,我想要一个通知。
我正在考虑编写一个包装类,该类公开一个可观察的发送通知,以及一些获取/释放锁的方法。但是,就像我提到的那样,我觉得我可能正在重做一些已经存在的事情。在不编写新类的情况下,我可以使用任何 .NET 技术来实现这一目标吗?
编辑:回答一些问题:为什么?在尝试执行之前,我需要知道一段代码何时忙碌。假设我们在 UI 上有两个按钮,A 和 B。A 执行方法 A,B 执行方法 B。他们都使用相同的对象来锁定/同步。当我看到有人已经在执行一段被同步对象实例 _syncObject 锁定的代码时,我想禁用这些按钮。我想给用户一个指示,该功能目前无法执行。
Monitor.TryEnter 或尝试验证锁是否可用不是解决方案,因为它需要轮询并且不是通知。
void methodA()
{
lock(_syncObject)
{
...
}
}
void methodB()
{
{
lock(_syncObject)
{
...
}
}