我正在使用Kinect,而且每隔一段时间它就会关闭中间程序,导致各种错误。由于没有解决此问题的方法,我想设置我的程序,以便在Kinect执行此操作时暂停。
public ManikinTrackingManager()
{
KinectSensor.GetDefault().IsAvailableChanged += MainWindow_IsAvailableChanged;
}
private bool kinnected = true;
private void MainWindow_IsAvailableChanged(object sender, IsAvailableChangedEventArgs e)
{
if (e.IsAvailable == true)
{
SpeechSynthManager.SpeakAsync("Kinect has been found!");
kinnected = true;
}
else
{
SpeechSynthManager.SpeakAsync("Your Kinect has been disconnected!");
SpeechSynthManager.SpeakAsync("Please wait while I try to fix this problem!");
kinnected = false;
waitForReconnect();
}
SpeechSynthManager.SpeakAsync("CHANGED " + e.IsAvailable.ToString());
}
这是我必须要断开的。但是,如果我尝试在循环上使用计时器等待相机重新连接,请说
void waitForReconnect()
{
while (kinnected == false)
{
Thread.sleep(500);
}
}
但是,在重新连接Kinect之前,这段代码不会暂停,而是冻结整个计算机。我还应该尝试什么?
答案 0 :(得分:0)
UI将冻结,因为您正在UI线程中执行所有操作。当你在UI线程中调用Thread.Sleep时,它会完全冻结UI。通常,它是在单独的线程中完成的。
即使你想冻结UI,你也需要在一个单独的线程中更新kinnected变量。
使用BackgroundWorker,Tasks或类似的东西来执行您的操作。
要同步线程而不是Thread.Sleep,请使用ManualResetEvent或其他同步对象。避免Thread.Sleep是一种很好的做法。
另外,请查看async / await。