Перехват исключений, возникающих при вызове Application.DoEvents () - PullRequest
2 голосов
/ 25 января 2012

Я новичок в .Net, и мне интересно, почему этот код все еще вызывает необработанное исключение.

try
{
    Application.DoEvents();
}
catch
{
}

У кого-нибудь есть идеи? Этот код вызывается внутри обработчика событий. Выдает NullReferenceException. Самое смешное, что когда я пытаюсь поставить точку останова прямо перед этим кодом, исключение не выдается. Исключение возникает только тогда, когда я позволяю коду работать непрерывно

Ответы [ 3 ]

1 голос
/ 25 января 2012

Не все исключения поддаются отлову. Вы не сказали нам, какое исключение вы видите, но обратите внимание, что StackOverflowException и ExecutionEngineException никогда не могут быть пойманы. Я знаю, что первое может случиться с Application.DoEvents (часто в System.Drawing), но я не уверен насчет второго.

В любом случае, твой код злой. Не глотайте исключения. Это означает, что вы глотаете ошибки.

В общем, старайтесь избегать Application.DoEvents. Есть действительно неприятные проблемы повторного входа, которые могут произойти.

0 голосов
/ 25 января 2012

Возможно также, что когда вы запускаете приложение без точки останова, DoEvents разрешает выполнение другого фрагмента кода и , что фрагмент кода вызывает исключение.

Вам следует проверить StackTrace исключения, чтобы увидеть, куда оно указывает (или опубликовать трассировку стека здесь, и мы можем посмотреть на нее).В этом случае вы можете не видеть исключения, когда используете точку останова и пошаговое выполнение, потому что DoEvents и потоки не запускаются одинаково.

Если исключение выдается из другого места во времяDoEvents, который также объяснил бы, почему вы получаете необработанное исключение, даже если приведенный выше код пытается скрыть любые исключения.

0 голосов
/ 25 января 2012

Внимание к использованию Application.DoEvents(), большую часть времени используется для неправильных вещей, таких как обновление индикатора выполнения в процессе затрат времени, которое может быть выполнено с помощью асинхронного программирования. Вы не можете перехватить все исключения, пожалуйста, сообщите нам, какие исключения вызываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...