我知道之前已经讨论过这个问题,但是我没有找到一个令人满意的答案。
我有一个电子邮件文件(.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);
}
}
如果我尝试再次打开同一个文件,它会“有时”抛出“文件正在使用异常”,因此,我认为即使我释放了邮件项,它也没有被正确释放。
我该怎么做才能确保它被正确释放。关闭并重新打开文件是非常常见的情况。
任何指针将非常有帮助。