So che questo è stato discusso in precedenza ma non sono riuscito a trovare una risposta soddisfacente.Rilascio dell'oggetto COM in C#
Ho un file di posta elettronica (.msg) che apro come di seguito e quindi chiama 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 ?
gli utenti possono chiuderlo e riaprirlo. Prima di fare clic su "riapri", controllo se la finestra esiste ancora, se sì, quindi manda un SetForeground (hwnd) a quella finestra. in caso contrario, significa che l'utente lo ha chiuso, quindi rilascia l'oggetto mailItem e apri di nuovo.
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);
}
}
Se provo ad aprire nuovamente lo stesso file. Esso "a volte" genera un "file in uso di eccezione" Quindi, penso che anche se sto rilasciando il MailItem .. non è stato rilasciato correttamente.
Cosa posso fare per assicurarmi che venga rilasciato correttamente. chiudere e riaprire un file è uno scenario molto comune.
Qualsiasi suggerimento sarà molto utile.
Si dovrebbe "rilasciare" solo quando si incrementa il contatore di riferimento, "rilasciare" altri riferimenti a persone può causare problemi. – Matthew