我知道这已经讨论过了,但我找不到满意的答案.
我有一个电子邮件文件(.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 ?
Run Code Online (Sandbox Code Playgroud)
用户可以关闭它并重新打开它.在他们点击"重新打开"之前,我检查窗口是否仍然存在,如果是,那么只需将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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我再次尝试打开同一个文件.它"有时"会抛出"正在使用的文件异常"所以,我认为即使我发布了MailItem,它也没有被正确发布.
我该怎么做才能确保其正确发布.关闭和重新打开文件是一种非常常见的情况.
任何指针都会非常有用.