如何关闭Kinect USB端口的手柄以防止VisualStudio崩溃?

ast*_*eal 5 c# visual-studio-2010 visual-studio kinect

我正在研究Kinect,偶尔Kinect使Visual Studio崩溃.

当我kinectSensor.Start()在调试后调用该方法时发现Kinect已经在另一个进程中使用了.

但没有其他进程使用Kinect! 它在启动我的机器并启动应用程序后的早上发生了一次.但大多数时候,当我启动Kinect应用程序时(在VisualStudio 2010的调试模式下),我停止应用程序,经过一些代码修改后我重新启动应用程序,那时它不起作用,我有上面的异常和2秒后Visual Studio崩溃.

此外,我检查Kinect是否已经运行,情况并非如此(在调试期间Kinect传感器的状态下方):

kinect传感器的状态(调试模式)

最奇怪的是,有时它可以在几周内正常工作,之后它会在应用程序的每两/三次启动时使用两天.

我在这个问题上找到的唯一解决方案是来自一个问题非常相似的人(互联网上唯一一个?):Imad Elayyan

当我启动Process Explorer时,我发现了完全相同的USB端口处理问题(如照片所示),这是一个突然显示的过程,当我们关闭应用程序时它不会终止.

Kinect的USB手柄的突变过程

但他的解决方案并不是一个长期的解决方案:我必须手动杀死突变体并重新启动VisualStudio.有时我必须在早上重启VS 20次......

有没有办法正确关闭usb端口的句柄(代码?),这样当我关闭应用程序时它会终止该句柄并且不会使VS崩溃了?

任何帮助将不胜感激,这真的令我感到困惑,它让我发疯.

其他信息:

我正在使用适用于WindowsSDK1.5 + Kinect,SDK1.0 + Kinect XBox360也是如此

我已经尝试用另一个VS实例调试VS.

ast*_*eal 0

好的,谢谢各位关心。我想我找到了问题的根源,但是我仍然缺乏对句柄端口的解释。

\n\n

事实:

\n\n
    \n
  1. 我的解决方案中有 3 个项目,两个类库: Kinect.dll创建与设备的连接、处理手势识别部分和光标创建。KinectControls.dll\n它创建可以\n与光标交互的控件(按钮、边框、3D 图表...)。和一个测试项目。

  2. \n
  3. Kinect.dll 启动 Kinect + 一些自定义事件的事件:\n ColorFrameReady, DepthFrameReady, GestureRecognised...

  4. \n
  5. 大多数事件是程序集中的内部事件,但有些事件从外部类中可见。

  6. \n
  7. 每个注册的事件都是未注册的(或者我是这么认为的)。

  8. \n
  9. 我为 Kinect 相关的类实现了外观模式。KinectFacade 拥有KinectStop关闭连接和取消注册事件的方法。

  10. \n
\n\n

问题的根源:

\n\n

当应用程序关闭时,Application.Current.Shutdown()名为 KinectStop 的方法会停止 Kinect 并在程序集中取消注册处理程序。但在外部程序集中,在 Kinect 关闭后调用取消注册(即使也调用了取消注册Application.Current.Shutdown()),这导致了“基本/通常”错误。所以我删除了注销。

\n\n

当您不取消注册 Kinect 事件并且 Kinect 关闭(KinectSensor.stop()调用方法)时,即使应用程序关闭并且任何线程终止,它(偶尔)也会保留 USB 句柄!之后:无法重新打开应用程序(崩溃),最后当您尝试关闭 Visual Studio 时,它崩溃了(正如我的问题中所解释的)。Kinect.Start()

\n\n

我找到的解决方案

\n\n

KinectStop()被调用时,我在关闭 Kinect 之前使用计时器,以便外部程序集中的每个类都可以取消注册事件。

\n\n

此外,从现在开始,外部类不再提供“正常”事件:fa\xc3\xa7ade 处理这些事件并引发可从外部世界获得的FastSmartWeakEvent 。它解决了内存泄漏,在某些情况下也可以解决我的问题。

\n\n

从那时起,不再处理 USB 端口,Visual Studio 不再崩溃。

\n\n

概括

\n\n

我已经找到了问题的根源和解决方案来绕过它。我希望这能帮助任何有类似问题的人。

\n\n

但是我仍然不明白为什么关闭应用程序和/或KinectSensor.Stop()从 SDK 调用方法不会关闭所有事件处理程序/线程/进程/端口句柄。为什么关闭 Visual Studio 会导致崩溃,即使前一个 Visual Studio 仍在运行?

\n\n

如果有人有建议,会受到欢迎吗?

\n