Каков наилучший подход к обработке исключения пустой ссылки на интерфейс пользователя инспектора надстроек Outlook, вызванного отменой продолжительного асинхронного вызова? - PullRequest
0 голосов
/ 17 января 2019

Когда пользователь открывает элемент электронной почты Outlook, моя надстройка Outlook создает новый инспектор в коллекции Outlook.Inspectors. Для заполнения пользовательских элементов управления области формы инспектора вызывается несколько длительных асинхронных вызовов БД. Как правило, пользователь может закрыть окно электронной почты / инспектора в любое время, пока выполняются асинхронные вызовы. Проблема заключается в закрытии области формы перед завершением асинхронного вызова. В результате, когда асинхронный вызов завершен, мой код инспектора пытается обновить пользовательский элемент управления области формы, но к этому моменту элемент управления становится пустым и располагается в событии закрытия области формы. Следовательно, исключение нулевой ссылки выбрасывается. Я добавил некоторый код в событие закрытия инспектора, где я установил специальный флаг, указывающий, что инспектор закрыт. Значение флага проверяется в блоке catch (NullReferenceException) . Если флаг показывает, что электронная почта закрыта, исключение нулевой ссылки игнорируется, и выдается новое исключение OperationCancelledException, чтобы отменить другие связанные выполняющиеся асинхронные вызовы. Хотя код работает, я не уверен, что это лучший подход для обработки ошибки таким способом. Во-первых, хотя флаг указывает, что электронная почта закрыта, исключение нулевой ссылки может быть необязательным, связанным с удаленным пользовательским элементом управления пользовательского интерфейса. Во-вторых, мне нужно добавить блок catch (NullRefernceException) , чтобы блок try-catch во всех соответствующих методах. Если у вас была похожая проблема, не могли бы вы посоветовать свое решение, пожалуйста? Спасибо.

1 Ответ

0 голосов
/ 17 января 2019

Вместо того, чтобы генерировать и обрабатывать исключения, я бы порекомендовал вести словарь открытых элементов, чтобы вы могли легко определить, по-прежнему ли открыто конкретное окно.Например, вы можете разработать оболочку инспектора - см. Реализация оболочки для инспекторов и отслеживание событий уровня элемента в каждом инспекторе .

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