Tôi biết điều này đã được thảo luận trước đó nhưng tôi không thể tìm thấy câu trả lời thỏa đáng.Phát hành đối tượng COM trong C#
Tôi có một tệp e-mail (.msg) mà tôi mở như sau và sau đó gọi Hiển thị.
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 ?
người dùng có thể đóng và mở lại. Trước khi họ nhấp vào "mở lại" tôi kiểm tra xem cửa sổ vẫn còn tồn tại, nếu có .. sau đó chỉ cần gửi một SetForeground (hwnd) đến cửa sổ đó. nếu không, điều đó có nghĩa là người dùng đã đóng nó để chỉ phát hành đối tượng mailItem và mở lại.
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);
}
}
Nếu tôi cố gắng mở lại cùng một tệp. Nó "đôi khi" ném một "tập tin trong sử dụng ngoại lệ" Vì vậy, tôi nghĩ rằng mặc dù tôi đang phát hành MailItem .. nó không được phát hành đúng cách.
Tôi có thể làm gì để đảm bảo rằng nó được phát hành đúng cách. đóng và mở lại một tệp là một tình huống rất phổ biến.
Mọi con trỏ sẽ rất hữu ích.
Bạn chỉ nên "giải phóng" khi bạn tăng bộ đếm tham chiếu, "giải phóng" các tham chiếu khác của người khác có thể gây ra sự cố. – Matthew