Мне кажется, что я могу изобретать колесо здесь. Вот что я пытаюсь достичь:Уведомление о включении/высвобождении монитора
Когда объект заблокирован с использованием lock
или Monitor.Enter
, я хотел бы получать уведомление. Аналогично, когда объект освобожден, я хотел бы получить уведомление.
Я думаю о написании класса оболочки, который предоставляет наблюдаемые для отправки уведомлений, а также несколько методов для получения/освобождения блокировки. Но, как я уже упоминал, я чувствую, что могу переделать то, что уже существует. Любые методы .NET, которые я мог бы использовать для достижения этого, написав новый класс?
EDIT: Чтобы ответить на некоторые вопросы: Почему? Мне нужно знать, когда часть кода занята, прежде чем пытаться выполнить. Предположим, что у нас есть две кнопки в пользовательском интерфейсе, A и B. Выполняется методA, а B выполняет методB. Они оба используют один и тот же объект для блокировки/синхронизации. Я хотел бы отключить эти кнопки, когда вижу, что кто-то уже выполняет кусок кода, который заблокирован экземпляром объекта sync _syncObject. Я хотел бы дать пользователю указание, что функция не может быть выполнена в данный момент.
Monitor.TryEnter или попытка проверить, доступен ли замок, не является решением, поскольку он требует опроса и не является уведомлением.
void methodA()
{
lock(_syncObject)
{
...
}
}
void methodB()
{
{
lock(_syncObject)
{
...
}
}
Я так не считаю. –
Вы, вероятно, не захотели бы, даже если бы могли. Скорее всего, у вас есть проблема с вашим дизайном, если вы хотите это сделать. – Servy
Почему вы пытаетесь это сделать? Это точно не встроено. Может быть, мы сможем лучше ответить, если узнаем «почему». – usr