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传感器的状态下方):
最奇怪的是,有时它可以在几周内正常工作,之后它会在应用程序的每两/三次启动时使用两天.
我在这个问题上找到的唯一解决方案是来自一个问题非常相似的人(互联网上唯一一个?):Imad Elayyan
当我启动Process Explorer时,我发现了完全相同的USB端口处理问题(如照片所示),这是一个突然显示的过程,当我们关闭应用程序时它不会终止.
但他的解决方案并不是一个长期的解决方案:我必须手动杀死突变体并重新启动VisualStudio.有时我必须在早上重启VS 20次......
有没有办法正确关闭usb端口的句柄(代码?),这样当我关闭应用程序时它会终止该句柄并且不会使VS崩溃了?
任何帮助将不胜感激,这真的令我感到困惑,它让我发疯.
其他信息:
我正在使用适用于Windows的SDK1.5 + Kinect,但SDK1.0 + Kinect XBox360也是如此
我已经尝试用另一个VS实例调试VS.
好的,谢谢各位关心。我想我找到了问题的根源,但是我仍然缺乏对句柄端口的解释。
\n\n事实:
\n\n我的解决方案中有 3 个项目,两个类库: Kinect.dll
创建与设备的连接、处理手势识别部分和光标创建。KinectControls.dll
\n它创建可以\n与光标交互的控件(按钮、边框、3D 图表...)。和一个测试项目。
Kinect.dll 启动 Kinect + 一些自定义事件的事件:\n ColorFrameReady
, DepthFrameReady
, GestureRecognised
...
大多数事件是程序集中的内部事件,但有些事件从外部类中可见。
每个注册的事件都是未注册的(或者我是这么认为的)。
我为 Kinect 相关的类实现了外观模式。KinectFacade 拥有KinectStop
关闭连接和取消注册事件的方法。
问题的根源:
\n\n当应用程序关闭时,Application.Current.Shutdown()
名为 KinectStop 的方法会停止 Kinect 并在程序集中取消注册处理程序。但在外部程序集中,在 Kinect 关闭后调用取消注册(即使也调用了取消注册Application.Current.Shutdown()
),这导致了“基本/通常”错误。所以我删除了注销。
当您不取消注册 Kinect 事件并且 Kinect 关闭(KinectSensor.stop()
调用方法)时,即使应用程序关闭并且任何线程终止,它(偶尔)也会保留 USB 句柄!之后:无法重新打开应用程序(崩溃),最后当您尝试关闭 Visual Studio 时,它崩溃了(正如我的问题中所解释的)。Kinect.Start()
我找到的解决方案
\n\n当KinectStop()
被调用时,我在关闭 Kinect 之前使用计时器,以便外部程序集中的每个类都可以取消注册事件。
此外,从现在开始,外部类不再提供“正常”事件:fa\xc3\xa7ade 处理这些事件并引发可从外部世界获得的FastSmartWeakEvent 。它解决了内存泄漏,在某些情况下也可以解决我的问题。
\n\n从那时起,不再处理 USB 端口,Visual Studio 不再崩溃。
\n\n概括
\n\n我已经找到了问题的根源和解决方案来绕过它。我希望这能帮助任何有类似问题的人。
\n\n但是我仍然不明白为什么关闭应用程序和/或KinectSensor.Stop()
从 SDK 调用方法不会关闭所有事件处理程序/线程/进程/端口句柄。为什么关闭 Visual Studio 会导致崩溃,即使前一个 Visual Studio 仍在运行?
如果有人有建议,会受到欢迎吗?
\n