Sé que esto se ha discutido anteriormente, pero no pude encontrar una respuesta satisfactoria.Release COM Object en C#
Tengo un archivo de correo electrónico (.msg) que abro como a continuación y luego llamo a 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 ?
los usuarios pueden cerrarlo y volver a abrirlo. Antes de que hagan clic en "volver a abrir", verifico si la ventana todavía existe, en caso afirmativo, simplemente envíe un SetForeground (hwnd) a esa ventana. si no, eso significa que el usuario lo cerró, simplemente libere el objeto mailItem y ábralo nuevamente.
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);
}
}
Si intento abrir el mismo archivo nuevamente. "A veces" arroja una "excepción de archivo en uso" Entonces, creo que a pesar de que estoy lanzando el MailItem ... no se ha lanzado correctamente.
Qué puedo hacer para asegurar que se libere correctamente. cerrar y volver a abrir un archivo es un escenario muy común.
Cualquier apuntador será de gran ayuda.
Solo debe "liberar" cuando incrementa el contador de referencia, "liberar" referencias de otras personas puede causar problemas. – Matthew