Отладка.Сбой выдает ошибку «Обработка диспетчера приостановлена»

#.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 не беспокоиться о проблемах с диспетчером.