5

我正在研究 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 崩溃?

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

附加信息

我正在使用SDK1.5 + Kinect for Windows,但SDK1.0 + Kinect XBox360也是如此

我已经尝试使用另一个 VS 实例来调试 VS。

4

3 回答 3

0

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

事实:

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

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

  3. 大多数事件在程序集中是内部的,但有些事件在外部类中是可见的。

  4. 每个注册的事件都是未注册的(或者我认为)。

  5. 我为 Kinect 相关的类实现了外观模式。KinectFacade 拥有一个KinectStop关闭连接和注销事件的方法。

问题的根源:

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

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

我找到的解决方案

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

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

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

概括

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

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

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

于 2012-07-09T08:31:04.120 回答
0

确保 Kinect 插入 USB 2.0 端口而不是 USB 3.0。

Microsoft Kinect 不支持 USB3.0,并且将其与 Kinect 一起使用会导致各种疯狂的行为。

我遇到了许多与您相同的零星问题,当我开始使用我机器上为数不多的 USB2.0 端口之一时,问题得到了解决。

于 2013-08-14T04:00:49.180 回答
-2

试试窗户对撞机。它将轻松解决您的问题。

于 2012-07-06T12:28:04.893 回答