Освободить COM-объект на C #

Я знаю, что это обсуждалось ранее, но я не смог найти удовлетворительного ответа.

У меня есть файл электронной почты (.msg), который я открываю, как показано ниже, и затем вызываю Display.

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 ... он не был выпущен должным образом.

Что я могу сделать, чтобы убедиться, что он выпущен должным образом. закрытие и повторное открытие файла - очень распространенный сценарий.

Любые указатели будут очень полезны.

5
задан DIF 13 February 2012 в 15:59
поделиться