我创建了一个普通的 C# dll 并将其标记为 COM 互操作。 dll 是一个普通的用户表单,没有任何功能,因为这是一个实验。
我注册了 DLL 并打开了 active x 测试容器并实例化了我的 COM 对象。它显示在测试容器中,我可以查看控件公开的方法 - 这些是默认方法,不是我创建的。
然后我退出 active x 测试容器,我注意到测试容器仍然潜伏在任务管理器中,我不得不手动终止进程。这让我相信测试容器仍然持有对为 com inter op 公开的我的 C# dll 的引用。
designer.cs中默认的dispose方法是
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
当我使用带有 Quick time 的测试容器时,它按预期调用了 quick time,当我关闭测试容器时,它正确处理并且没有在任务管理器中留下足迹。
问题 - 在我的 dispose 方法中是否有我必须做的特定事情?此外,这可能不相关,但是当我创建一个测试项目并启动我的 c# 控件并单击关闭按钮时,它关闭了我的测试表单但测试应用程序 ins 仍在 Debug模式下运行 - 运行按钮被禁用.
最佳答案
你可以试试:
public void IDisposable.Dispose()
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(this);
}
通常,您在从 .net 中使用 COM 对象时会这样做,但不确定其他方式。但尝试一下也无妨。让我知道结果如何;-)
编辑:
你也可以尝试抑制终结:
GC.SuppressFinalize(这个);
关于c# - 处置标记为 COM 互操作的 C# DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/472956/