Visual studio VisualStudio项目仍然是“;";停下来的时候
目前正在开发连接HP质量中心的连接器DLL。我正在使用他们的(插入Experative)COM API连接到服务器。互操作包装器由VStudio自动创建 我的解决方案有两个项目:DLL和一个测试程序应用程序——本质上是一个带有按钮的表单,用于调用DLL中的函数。一切都很好-我可以创建缺陷,更新和删除它们。当我关闭主窗体时,应用程序会很好地停止 但是当我调用一个返回所有可用项目列表的函数(以填充组合框)时,如果我关闭主窗体,VStudio仍然显示解决方案正在运行,我必须停止它 我成功地在代码中找到了一个函数,当我调用时,解决方案保持“挂起”,如果我不这样做,它就会很好地关闭。它是对TDC对象Visual studio VisualStudio项目仍然是“;";停下来的时候,visual-studio,com,interop,debugging,hp-quality-center,Visual Studio,Com,Interop,Debugging,Hp Quality Center,目前正在开发连接HP质量中心的连接器DLL。我正在使用他们的(插入Experative)COM API连接到服务器。互操作包装器由VStudio自动创建 我的解决方案有两个项目:DLL和一个测试程序应用程序——本质上是一个带有按钮的表单,用于调用DLL中的函数。一切都很好-我可以创建缺陷,更新和删除它们。当我关闭主窗体时,应用程序会很好地停止 但是当我调用一个返回所有可用项目列表的函数(以填充组合框)时,如果我关闭主窗体,VStudio仍然显示解决方案正在运行,我必须停止它 我成功地在代码中找到
get_VisibleProjects
中的属性的调用,该属性返回一个列表(不是.Net列表,而是COM库中的一个类型)-我只是对其进行迭代,然后返回一个正确的列表(稍后用于填充组合框):
public List GetAvailableProjects()
{
列表项目=新列表();
foreach(this.tdc.get_VisibleProjects(qcDomain))中的字符串项目)
{
项目。添加(项目);
}
返回项目;
}
我的假设是有些东西会保留在记忆中。如果我在VStudio之外运行EXE,它会关闭——但谁知道内存中会留下什么呢
我的问题是-我如何摆脱所谓的这个属性返回?GC不应该处理这个吗?我需要深入研究指针吗
我尝试过的事情:
将列表放入变量并在函数末尾将其设置为null
向类中添加析构函数并将tdc
对象置零
一路走完tester函数应用程序,当窗体关闭并且主函数结束时,它关闭了,但是VStudio仍然显示我正在运行
谢谢你的帮助 您是否已尝试在完成使用System.Runtime.InteropServices.Marshal.ReleaseComObject时手动释放列表对象?我怀疑有一些悬空线程
出现这种情况时,请暂停调试器中的进程,并查看仍有哪些线程。可能会尝试使用列表的计数和项属性手动迭代列表,而不是使用其迭代器,例如:
for (int i=1; i <= lst.Count ; ++i)
{
string projectName = lst.Item(i);
}
for(int i=1;i尝试将这两行添加到生成后事件:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
感谢您的链接-我知道并尝试了它-不起作用:(我没有答案,但是+1对于一个措辞巧妙的问题,我试过了-有一些线程,但不是主要线程。你建议我如何继续?我不是线程处理人员。据我所知,这可能是几件事。最好是使用调试器四处搜索,看看谁制作/拥有这些线程。很好的建议。将尝试并报告。)t、 谢谢你的提议-这是我第一次尝试。没有成功。如果我可以问的话,那有什么用?请阅读这里:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"