我使用的是kinect SDK 1.7(因为只有那个适用于win 7)。
我的程序运行良好,我可以更改视频模式的深度和颜色没有错误。但当我想用右上角的红色十字关闭主窗体的角按钮关闭程序时,它就错了。事实上,即使我在Deactivate Sensor中设置了断点,它也会缝合。。它从未被触发??
我在下面写的代码没有成功。
private void DeActivateSensor()
{
if (kinectSensor != null)
{
if (kinectSensor.SkeletonStream.IsEnabled) { kinectSensor.SkeletonStream.Disable();}
if (kinectSensor.ColorStream.IsEnabled) { kinectSensor.ColorStream.Disable(); }
if (kinectSensor.DepthStream.IsEnabled) {kinectSensor.DepthStream.Disable();}
Thread.Sleep(1000);
kinectSensor.ColorFrameReady -= new EventHandler<ColorImageFrameReadyEventArgs>(kinectSensor_ColorFrameReady);
kinectSensor.DepthFrameReady -= new EventHandler<DepthImageFrameReadyEventArgs>(kinectSensor_DepthFrameReady);
// since i dont have skelleton events i dont need to repeat that for it
try
{
if (kinectSensor.IsRunning) { kinectSensor.Stop(); }
}
catch
{
Debug.WriteLine("unknown Exception ");
}
Thread.Sleep(1000);
if (kinectSensor != null) { kinectSensor.Dispose(); }
}
}
private void MainForm_Load(object sender, EventArgs e)
{
DeActivateSensor();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
DeActivateSensor();
}
这很奇怪。我认为这不是一个好答案。这更像是一种肮脏的变通方法。
使用vs2015调试。事实证明,在我正确关闭活动流之后。并正确注销了我的新颜色和新深度帧事件。接下来,应用程序在kinectsensor.stop()和kinectsensor上冻结。Dispose()。移除这些止动块();和dispose();命令,允许应用程序关闭,尽管关闭需要很长时间,比如10秒左右,这对我来说很奇怪
所以,不关闭这个摄像头,它就关闭了。。奇怪的
我不认为这是推荐的方法,所以如果有人知道如何以正确的方式做到这一点,我会洗耳恭听。