Экземпляр Outlook становится пустым после использования MailItem.Display () и MailItem.Close () - PullRequest
0 голосов
/ 19 октября 2018

Короткая версия: Мне нужно отобразить текущий выбранный элемент почты на экране.Тогда позже мне нужно закрыть окно.Проблема заключается в том, что закрытие окна mailItem завершает экземпляр приложения Outlook.

Detail: У меня есть функция, которая вызывает MailItem.Display (false), чтобы отобразить выбранный в настоящее время элемент почты на экране.,Затем отдельный инструмент выполняет некоторую автоматизацию «на стекле» (перемещает мышь по нажатию кнопки).Затем, когда это сделано, у меня есть функция, которая закрывает окно.Проблема в том, что когда я закрываю окно инспектора почтовых элементов, мой экземпляр Outlook закрывается все вместе.Мой класс, в котором был создан экземпляр outlook, остается таким, каким он должен быть, но теперь все будущие вызовы функций завершаются сбоем, поскольку объект приложения Outlook, который я глобально определил в своем классе, теперь равен нулю.

;

;

Вот первая функция для отображения mailItem:

    public string DisplayMail(string ID){                      
        try{
            Outlook.MailItem mailItem = (Outlook.MailItem)(oNamespace.GetItemFromID(ID,activeFolder.StoreID));

            mailItem.Display(false);
            mailItem.GetInspector.Activate(); //just to bring the window to the front if it isn't

            return("Success");

        } catch (Exception e){
            return(ErrPrefix + e.ToString());
        }
    }

Вот код, который закрывает mailItem:

    public string CloseMail(string ID){
        try{
            Outlook.MailItem mailItem = (Outlook.MailItem)(oNamespace.GetItemFromID(ID,activeFolder.StoreID));
            mailItem.Close(Outlook.OlInspectorClose.olDiscard);

            return("Success");

        } catch (Exception e){
            return(ErrPrefix + e.ToString());
        }
    }

Вот некоторый связанный глобальный код:

oApp = new Outlook.Application();
oNamespace = oApp.GetNamespace("MAPI");

Я использую .Net Core 2.0, для работы на стекле это требуется.Я перестраиваю старый инструмент, который выполнял ту же работу, но был очень медленным и трудным для проверки ошибок.Я стараюсь держать как можно больше на экране, чтобы ускорить процесс, поэтому я не отображаю главное окно перспективы или элементы почты, если мне это абсолютно не нужно.Они бегут невидимыми на заднем плане.К сожалению, в этом случае я должен отобразить mailItem, чтобы другой инструмент мог выполнять работу со стеклом.Из того, что я могу сказать, если outlook обнаруживает последнее событие закрытия окна outlook, умирает экземпляр приложения.Что странно, потому что если окно никогда не отображается и я работаю в фоновом режиме, экземпляр будет продолжаться до тех пор, пока я не отпущу / убью его или класс, содержащий экземпляр, не будет деконструирован.

Спасибо за любую помощь.

...