我正在使用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