Outlook mailitem не закрывается должным образом

Мне удалось успешно открыть новый почтовый элемент Outlook из кода С #, используя следующее:

using Outlook = Microsoft.Office.Interop.Outlook;


Outlook.Application oApp;
Outlook.Inspectors oInspects;
Outlook._MailItem  oMailItem;


oApp = new Outlook.Application();
oInspects = oApp.Inspectors;
oMailItem = (Microsoft.Office.Interop.Outlook._MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

oMailItem.Display(true);

Моя проблема заключается в следующем: когда я нажимаю X в углу окна почтового элемента, чтобы закрыть его, я получаю сообщение с вопросом, хочу ли я сохранить изменения, что нормально. но после выбора варианта «нет» окно электронной почты закрывается, но кажется, что сразу за ним появляется другое (выделено серым цветом), и мне нужно снова щелкнуть X в углу, чтобы закрыть его.

то же самое происходит, если я нажимаю кнопку «Отправить», чтобы отправить электронное письмо. исходное окно закрывается, а затем появляется другое точно такое же окно (со всем содержимым), но кнопки неактивны, и мне нужно нажать X, чтобы закрыть его

Я попытался закрыть окно с помощью следующего кода (любая комбинация строк ниже), но, похоже, ничего не работает:

oMailItem.Close(Microsoft.Office.Interop.Outlook.OlInspectorClose.olDiscard);
oMailItem.Delete();
Marshal.FinalReleaseComObject(oMailItem);
Marshal.ReleaseComObject(oApp);

Если у кого-то есть идея, как решить эту проблему, я был бы очень признателен. Я часами ломал себе голову в поисках ответа

заранее спасибо


person Avner    schedule 02.10.2012    source источник


Ответы (3)


Несмотря на то, что ему 4 года, вот как я решил проблему:

while (System.Runtime.InteropServices.Marshal.ReleaseComObject(mailItem) != 0) { }
mailItem = null;
GC.Collect();
GC.WaitForPendingFinalizers();
person Timo Rzipa    schedule 08.07.2016

Попробуйте использовать oMailItem.Display(false); вместо true

person Tahiaji    schedule 10.01.2013

Я пробовал ваш код с Outlook 2007 + VS 2010 Express. Проблема, с которой вы столкнулись, не возникает в моем окружении. Я пробовал с запуском Outlook и без него при запуске кода.

Оператор using является частью раздела using в верхней части исходного кода, а не ссылкой на переменную using в подпрограмме.

«Истина» в oMailTime.Display (true) должна оставаться верной, чтобы получить модальное окно.

person Axel Kemper    schedule 10.01.2013