等待摄像头重新连接C#
我正在使用Kinect,它每隔一段时间就会关闭mid程序,导致各种各样的错误。由于没有解决此问题的方法,我想将程序设置为在Kinect执行此操作时暂停等待摄像头重新连接C#,c#,windows,thread-safety,C#,Windows,Thread Safety,我正在使用Kinect,它每隔一段时间就会关闭mid程序,导致各种各样的错误。由于没有解决此问题的方法,我想将程序设置为在Kinect执行此操作时暂停 public ManikinTrackingManager() { KinectSensor.GetDefault().IsAvailableChanged += MainWindow_IsAvailableChanged; } private bool kinnected = true; priv
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重新连接,而是冻结了我的整个电脑。我还应该尝试什么?UI将冻结,因为您正在UI线程中执行所有操作。当你在UI线程中调用Thread.Sleep时,它会完全冻结UI。通常,它是在单独的线程中完成的
即使要冻结UI,也需要在单独的线程中更新kinnected变量 使用或类似的方法来执行您的操作 要同步线程而不是线程。请使用睡眠或其他同步对象。避免线程。睡眠是一个很好的实践
另外,查看async/await。重新连接的火
IsAvailableChanged
是否再次将IsAvailable
设置为true?应该是这样,但我不确定重新连接触发的IsAvailableChanged是否已更改@stuartd@Flotolk,是否SpeakAsync
返回Task
?@Nkosi我不这么认为。这只是一个让语音合成器说出以下字符串的功能,这里没有足够的信息。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建。我希望UI冻结,因为用户所做的许多事情都是定时的。我不喜欢的是,即使在我重新连接cameraDepending之后,UI仍然保持冻结状态。如果UI线程被阻塞,则无法触发事件。您需要在等待时以编程方式禁用UI,而不是锁定UI线程。永远不要冻结UI,不允许用户执行任何操作,但不要冻结。即使要冻结UI,也需要在单独的线程中更新kinnected变量。