Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待摄像头重新连接C#_C#_Windows_Thread Safety - Fatal编程技术网

等待摄像头重新连接C#

等待摄像头重新连接C#,c#,windows,thread-safety,C#,Windows,Thread Safety,我正在使用Kinect,它每隔一段时间就会关闭mid程序,导致各种各样的错误。由于没有解决此问题的方法,我想将程序设置为在Kinect执行此操作时暂停 public ManikinTrackingManager() { KinectSensor.GetDefault().IsAvailableChanged += MainWindow_IsAvailableChanged; } private bool kinnected = true; priv

我正在使用Kinect,它每隔一段时间就会关闭mid程序,导致各种各样的错误。由于没有解决此问题的方法,我想将程序设置为在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重新连接,而是冻结了我的整个电脑。我还应该尝试什么?

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变量。