我一直在使用 Kinect for Windows SDK 1.8 一段时间,只是在一段时间后重新熟悉它。我有一个基本的应用程序正在运行,它使用颜色和骨架流在用户的视频源上覆盖骨架,同时还实时显示他们躯干的 X、Y 和 Z 坐标。所有这一切都完美无缺,但我遇到了关闭应用程序的问题。首先,我的 Window_Close 事件如下所示:
private void Window_Closed(object sender, EventArgs e)
{
// Turn off timers.
RefreshTimer.IsEnabled = false;
RefreshTimer.Stop();
UpdateTimer.IsEnabled = false;
UpdateTimer.Stop();
// Turn off Kinect
if (this.mainKinect != null)
{
try
{
this.mainKinect.Stop();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
this.TxtBx_KinectStatus.Text += "\n[" + DateTime.Now.TimeOfDay.ToString() + "] " + this.mainKinect.UniqueKinectId.ToString() + " has been turned off.";
}
// Shut down application
Application.Current.Shutdown();
}
我添加了“Application.Current.Shutdown()”只是因为当我关闭窗口时我的程序会挂起并且永远不会真正关闭。我单步执行该函数,发现它挂在 this.mainKinect.Stop() 上,其中 mainKinect 是引用物理 Kinect 的 Kinect 对象。我认为它可能无法正确关闭两个流,所以我添加了
this.mainKinect.ColorStream.Disable();
this.mainKinect.SkeletonStream.Disable();
就在 Stop() 之前。我发现它实际上挂在 SkeletonStream.Disable() 上,我不知道为什么。我其余的大部分代码都直接来自他们的示例,所以我不知道为什么这不起作用。如果您有任何想法,或者希望我发布更多我的代码,请不要犹豫。