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() で実際にハングすることがわかりましたが、その理由はわかりません。私のコードの残りのほとんどは、例からそのままなので、なぜこれが機能しないのかわかりません。アイデアがある場合、または私のコードをもっと投稿してほしい場合は、躊躇しないでください。