Я знаю, что это обсуждалось ранее, но я не мог найти удовлетворительный ответ.
У меня есть файл электронной почты (.msg), который я открываю, как показано ниже, и затем вызываю Дисплей.
oApp = new Microsoft.Office.Interop.Outlook.Application();
mail = (Microsoft.Office.Interop.Outlook.MailItem)oApp.Session.OpenSharedItem(fileName);
mail.Display(false);
oApp = null; // do I need to release this object ?
пользователи могут закрыть его и снова открыть. Прежде чем они нажимают «открыть», я проверяю, существует ли окно, если да… тогда просто отправьте SetForeground (hwnd) в это окно. если нет, это означает, что пользователь закрыл его, поэтому просто освободите объект mailItem и откройте снова.
public static void ReleaseCOMObject(Microsoft.Office.Interop.Outlook.MailItem item) {
int r = System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
while (r != 0) {
r = System.Runtime.InteropServices.Marshal.ReleaseComObject(item);
}
}
Если я попытаюсь открыть тот же файл снова. Он «иногда» выдает «исключение при использовании файла». Поэтому я думаю, что, хотя я выпускаю MailItem, он не был выпущен должным образом.
Что я могу сделать, чтобы убедиться, что он выпущен правильно. закрытие и повторное открытие файла - очень распространенный сценарий.
Любые указатели будут очень полезны.