我正在使用Kinect开发使用C#和WPF的图像查看应用程序。当用户将两个他的手在他的头上,我显示Messagebox
询问用户,如果他/她真的想退出:消息框多次显示
//Quit if both hands above head
if (skeleton.Joints[JointType.HandLeft].Position.Y > skeleton.Joints[JointType.Head].Position.Y &&
skeleton.Joints[JointType.HandRight].Position.Y > skeleton.Joints[JointType.Head].Position.Y)
{
pause = true;
quit();
}
的quit()
功能如下:
private void quit()
{
MessageBoxButton button = MessageBoxButton.YesNo;
MessageBoxImage image = MessageBoxImage.Warning;
MessageBoxResult result = MessageBox.Show("Are you sure you want to quit?", "Close V'Me :(", button, image);
if (result == MessageBoxResult.Yes) window.Close();
else if (result == MessageBoxResult.No)
{
pause = false;
}
}
的pause
变量用于停止识别任何手势,而MessageBox
仍处于活动状态。 (pause
= false
指手势识别活性,否则没有。)
因此,有两个问题:
的
MessageBox
显示两次。如果在其中的任何一个中点击Yes
,则关闭window
。行为是好的,但我不想要两个窗口。如果点击
No
,则显示另一个MessageBox
。如果我在此框上点击No
,另一个会打开。这发生在我点击的每个连续的No
。在大约显示5-6次后,它给了我想要的行为,即它将pause
变量的值更改为false
,从而激活对其他手势的识别。
我究竟做错了什么?我能做些什么来阻止一切,并等待用户点击其中一个选项?此外,为什么MessageBox
会多次显示(最初两次,当我点击No
时更多)?
可能这是因为退出()是SYNCHRON。所以如果事件发生时代码进程退出()它可能会查询手中的事件在某处。 – TGlatzer
对不起,但我不完全知道同步方法是什么。但问题已解决。谢谢:) –
精确复制http://stackoverflow.com/questions/10489581/c-sharp-and-kinect-gesture-time – Kinected