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