【发布时间】:2012-03-05 00:42:41
【问题描述】:
我知道这已经在前面讨论过,但我找不到满意的答案。
我有一个电子邮件文件 (.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 .. 它也没有被正确释放。
我能做些什么来确保它正确发布。关闭和重新打开文件是一种非常常见的情况。
任何指针都会很有帮助。
【问题讨论】:
-
只有在增加引用计数器时才应该“释放”,“释放”其他人的引用会导致问题。