#.net #wpf #dispatcher
#.net #wpf #диспетчер
Вопрос:
У меня возникла проблема в коде, которая вызвала отладку.Не удается вызвать. Я использую Debug.Утверждение и отладка.Сбой довольно часто, поскольку он не только дает мне мгновенное уведомление о существовании проблемы, но и информацию о том, в чем и где находится проблема.
Но на этот раз отладка.Сам сбой вызвал еще большую проблему, поскольку пользовательский интерфейс (WPF) зависал из-за следующей ошибки:
Обработка диспетчера приостановлена, но сообщения все еще обрабатываются.
Могу ли я что-нибудь сделать для отладки.Сбой завершается успешно?Я определенно не хочу, чтобы код выполнялся с помощью Debug.Не удается проверить, следует ли вызывать или начинать вызывать.
РЕДАКТИРОВАТЬ: я полагаю, замена DefaultTraceListener поможет?
Ответ №1:
Похоже, вы отлаживаете.Сбой из-за обратного вызова изменения DependencyProperty.
Полный ответ вы можете найти здесь: «Обработка диспетчера приостановлена» Исключение InvalidOperationException при вызове ShowDialog
Комментарии:
1. Я тоже это видел, когда гуглил, и вполне возможно, что обратный вызов с измененным свойством находится в стеке вызовов. Но почему я должен заботиться об этом при отладке. Сбой? Я действительно не хочу беспокоиться о проблемах с потоками из-за этого.
Ответ №2:
Debug.Fail
по умолчанию будет использоваться DefaultTraceListener
. Используя ILSpy, я мог видеть, что DefaultTraceListener.Fail
это вызывает вызов AssertWrapper.ShowAssert
. Чтобы обойти проблему, замените DefaultTraceListener
ее на свою собственную, в которой есть защита диспетчера вокруг вызова AssertWrapper.ShowAssert
.
Вуаля! Теперь вы можете звонить Debug.Assert
и Debug.Fail
не беспокоиться о проблемах с диспетчером.