У меня есть программа для Windows Mobile, которая обращается к подключенному устройству через стороннюю DLL. Каждый вызов устройства может занять неизвестное время, поэтому каждый вызов включает свойство тайм-аута. Если для возврата вызова требуется больше времени, чем указанный тайм-аут, DLL вместо этого выдает исключение, которое мое приложение перехватывает без проблем.
У меня проблема с закрытием приложения. Если мое приложение вызвало DLL и ожидает истечения тайм-аута, а затем я закрываю приложение до истечения тайм-аута, мое приложение блокируется и требует перезагрузки КПК.
Я могу гарантировать, что приложение ожидает тайм-аута перед закрытием в нормальных условиях. Однако я пытаюсь использовать AppDomain.CurrentDomain.UnhandledException
для перехвата любых необработанных исключений в программе и использовать событие для ожидания истечения этого ожидающего тайм-аута, чтобы программа могла быть окончательно закрыта.
Моя проблема в том, что это мероприятие не продлится достаточно долго. Если я помещаю в событие строку MessageBox.Show("unhandled exception");
, а затем выбрасываю новое необработанное исключение из основной формы моего приложения, я вижу окно сообщения на долю секунды, но затем оно исчезает без нажатия кнопки ОК.
Документация, которую я нашел по этому событию, предполагает, что к моменту его вызова приложение полностью готово к закрытию, и закрытие не может быть остановлено, но я не думал, что это означает, что сам метод события не завершится. Что дает (думаю, вот в чем вопрос)?
Обновление: в полноэкранном режиме (Vista) это работает должным образом, но только если я использую событие Application.ThreadException
, которого нет в .Net CF 2.0.