我有一个在进程外实例化 COM exe 的类。班级是
public class MyComObject:IDisposable
{
private bool disposed = false;
MyMath test;
public MyComObject()
{
test = new MyMath();
}
~MyComObject()
{
Dispose(false);
}
public double GetRandomID()
{
if (test != null)
return test.RandomID();
else
return -1;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (test != null)
{
Marshal.ReleaseComObject(test);
test = null;
}
disposed = true;
}
}
我称之为如下
static void Main(string[] args)
{
MyComObject test = new MyComObject();
MyComObject test2 = new MyComObject();
//Do stuff
test.Dispose();
test2.Dispose();
Console.ReadLine();
}
现在,当程序正常执行时,这会清理我的 COM 对象。但是,如果我在执行过程中关闭程序,则框架不会调用释放我的非托管对象的代码。这很公平。但是,有没有办法强制程序在被杀死的情况下自行清理?
编辑:从任务管理器的硬杀来看,它看起来并不乐观:(