【发布时间】:2011-02-15 13:08:27
【问题描述】:
目前正在为惠普质量中心开发一个连接器 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 仍显示我正在运行。
感谢您的帮助!
【问题讨论】:
-
感谢您的链接 - 我知道并尝试过 - 没用 :(
-
我没有答案,但是对于一个措辞很好的问题 +1
标签: visual-studio com interop debugging hp-quality-center