我正在使用VSTO编写Outlook插件。每当我需要释放COM对象时,我都会这样做:
MailItem email = inbox.Items[1];
// Do something
Marshal.ReleaseComObject(email);
但是,如果我有很多COM对象,这将成为很多工作。我下面有两个代码片段。下面的代码片段中的任何一个或两个都会正确释放COM对象吗?
public class Demo
{
public void Main()
{
// Assume inbox exists.
MailItem email = inbox.Items[1];
// Do something
Release(email);
}
public void Release(object obj)
{
Marshal.ReleaseComObject(obj);
}
}
List<object> list = new List<object>();
MailItem email = inbox.Items[1];
list.add(email);
// Do something
foreach (object obj in list)
Marshal.ReleaseComObject(obj);
答案 0 :(得分:-2)
我建议将Release方法移动到实用程序类并传递对象byref以确保引用与调用代码保持相同。
public class ComUtil {
public static void Release (ref object obj) {
if(obj != null) {
Marshal.ReleaseComObject(obj);
}
}
}
然后你可以从代码中的任何地方调用这个方法......
List<object> list = new List<object>();
MailItem email = inbox.Items[1];
list.add(email);
// Do something
foreach (object obj in list)
ComUtil.Release(ref obj);