Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio VisualStudio项目仍然是“;";停下来的时候_Visual Studio_Com_Interop_Debugging_Hp Quality Center - Fatal编程技术网

Visual studio VisualStudio项目仍然是“;";停下来的时候

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仍然显示解决方案正在运行,我必须停止它 我成功地在代码中找到

目前正在开发连接HP质量中心的连接器DLL。我正在使用他们的(插入Experative)COM API连接到服务器。互操作包装器由VStudio自动创建

我的解决方案有两个项目:DLL和一个测试程序应用程序——本质上是一个带有按钮的表单,用于调用DLL中的函数。一切都很好-我可以创建缺陷,更新和删除它们。当我关闭主窗体时,应用程序会很好地停止

但是当我调用一个返回所有可用项目列表的函数(以填充组合框)时,如果我关闭主窗体,VStudio仍然显示解决方案正在运行,我必须停止它

我成功地在代码中找到了一个函数,当我调用时,解决方案保持“挂起”,如果我不这样做,它就会很好地关闭。它是对TDC对象
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)"