Как прервать работу при недопустимой ошибке межпотока

#.net #multithreading #visual-studio-2010 #debugging

#.net #многопоточность #visual-studio-2010 #отладка

Вопрос:

Мы только недавно обновились с VS2005 до VS2010. Я заметил, что в отличие от VS2005, когда отладочный код и среда разработки VS2010 IDE сталкиваются с операцией «Недопустимого перекрестного потока», среда разработки просто завершает работу приложения без «прерывания» в строке кода, которая вызывает проблему.

Я заглянул в раздел Debug> Exceptions в IDE, но я не нашел «Недопустимую операцию перекрестного потока» в качестве допустимой опции в системе.Пространство имен потоков. Я немного запутался в том, как заставить VS2010 IDE вести себя как VS2005 IDE, где это нарушило бы код и выделило строку, вызывающую недопустимую межпоточную операцию.

Кто-нибудь может мне здесь помочь?

Комментарии:

1. Можете ли вы попробовать включить прерывание для ВСЕХ исключений?

Ответ №1:

Измените все параметры в Debug > Exceptions на «Throwned» — Именно так вел себя старый VS.

Комментарии:

1. Я сделал, как вы предложили, включив все исключения CLR в значение thrown. Проблема с этим заключается в том, что каждая отдельная ошибка, независимо от того, находится ли она внутри TRY… CATCH приводит к сбою IDE. Это НЕ поведение старого VS.

Ответ №2:

Я обнаружил, что если я включу всю систему.Исключения при обработке потоков (даже если перекрестный поток отсутствует в списке), IDE теперь прерывается при ошибках перекрестного потока. Я понятия не имею, «какое» пространство имен исключений потоков содержит этот конкретный параметр, но теперь моя IDE работает так же, как VS2005.

Ответ №3:

Попробуйте систему.Исключение UnauthorizedAccessException. Это улавливает мои ошибки перекрестного потока

Ответ №4:

Это старый поток, но для Visual Studio 2017 я обычно получаю исключение межпотоковой операции в системе.Исключение InvalidOperationException.

Текст для исключения является:

 System.InvalidOperationException: 'Cross-thread operation not valid: Control 'XXXX' accessed from a thread other than the thread it was created on.'
  

Я полагаю, что может быть множество операций, которые считаются ошибками «перекрестного потока», поэтому они могут подпадать под разные категории исключений.