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