目前正在开发连接到 HP 质量中心的连接器 DLL。我正在使用他们的(插入说明性的)COM API 连接到服务器。VStudio 会自动创建一个 Interop 包装器。
我的解决方案有 2 个项目:DLL 和测试器应用程序 - 本质上是一个带有调用 DLL 中的函数的按钮的表单。一切正常——我可以创建缺陷、更新它们并删除它们。当我关闭主窗体时,应用程序会很好地停止。
但是当我调用一个返回所有可用项目列表的函数(以填充组合框)时,如果我关闭主窗体,VStudio 仍然显示解决方案正在运行,我必须停止它。
我设法在我的代码中查明了一个函数,当我调用时,解决方案仍然“挂起”,如果我不这样做,它会很好地关闭。它是对 TDC 对象中一个属性的调用,get_VisibleProjects
它返回一个List
(不是 .Net 对象,而是 COM 库中的一个类型)——我只是迭代它并返回一个正确的列表(我以后用它来填充组合框) :
public List<string> GetAvailableProjects()
{
List<string> projects = new List<string>();
foreach (string project in this.tdc.get_VisibleProjects(qcDomain))
{
projects.Add(project);
}
return projects;
}
我的假设是某些东西会保留在内存中。如果我在 VStudio 之外运行 EXE,它会关闭 - 但谁知道在内存中留下了什么?
我的问题是 - 我如何摆脱调用此属性返回的任何内容?GC不应该处理这个吗?我需要深入研究指针吗?
我尝试过的事情:
- 将列表放入变量并在函数末尾将其设置为 null
- 向类添加析构函数并使
tdc
对象为空 - 一路单步执行测试功能应用程序,当表单关闭并且 Main 功能结束时 - 它关闭了,但 VStudio 仍然显示我正在运行。
感谢你的协助!