Debug.Fail выдает ошибку «Обработка диспетчера приостановлена» - PullRequest
3 голосов
/ 31 октября 2011

У меня была проблема в коде, из-за которой вызывался Debug.Fail. Я довольно часто использую Debug.Assert и Debug.Fail, поскольку он не только дает мне мгновенное уведомление о существовании проблемы, но и информацию о том, где и где находится проблема.

Но на этот раз сам Debug.Fail вызвал еще большую проблему, поскольку пользовательский интерфейс (WPF) завис из-за следующей ошибки:

Обработка диспетчера приостановлена, но сообщения все еще обрабатываются.

Есть ли что-нибудь, что я могу сделать, чтобы Debug.Fail преуспел? Я определенно не хочу, чтобы Debug.Fail проверял код, чтобы проверить, вызывать ли Invoke или BeginInvoke.

РЕДАКТИРОВАТЬ: Полагаю, замена DefaultTraceListener поможет?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Debug.Fail по умолчанию будет использовать DefaultTraceListener. Используя ILSpy, я мог видеть, что DefaultTraceListener.Fail делает вызов AssertWrapper.ShowAssert. Чтобы обойти эту проблему, замените DefaultTraceListener на свой собственный, у которого охранники Диспетчера окружают вызов AssertWrapper.ShowAssert.

Вуаля! Теперь вы можете звонить Debug.Assert и Debug.Fail, не беспокоясь о проблемах с диспетчером.

1 голос
/ 31 октября 2011

Похоже, вы Debug.Fail от обратного вызова изменения DependencyProperty.

Полный ответ вы можете найти здесь: 'Обработка диспетчера приостановлена' InvalidOperationException при вызове ShowDialog

...