0

所以我正在使用按钮制作一个 Kinect 应用程序,并且为了导航该应用程序,我正在为每个按钮制作新窗口。我遇到了一个问题,我根本找不到任何帮助,希望能得到任何帮助。

所以要打开新窗口,我使用这个:

private void button1_Click(object sender, RoutedEventArgs e)
{
    //SUPPOSED to uninitialize the Kinect
    UninitializeKinectSensor(this.Kinect;
    //To open the new window
    Window1 newwindow = new Window1();
    newwindow.Show();
    //To close the first window...
    Close();
{

因此,该行应该取消初始化 Kinect,以便新窗口可以免费使用,但是当它进入新窗口时,Kinect 会冻结。如果我使用鼠标返回第一个窗口,它会再次在第一个窗口上工作,这是不应该的。

我还在初始化阶段添加了这一行

public Window1()
{
    //Other init code is here, but this is the line I added. It doesn't seem to do anything.
    InitializeKinectSensor(this.Kinect);
}

任何帮助是极大的赞赏!!我确定这很简单,我只是惨败了哈哈XD

4

3 回答 3

1

你真的必须创建一个新窗口而不是使用页面吗?

在您的 MainWindow 中,您创建一个包含所有窗口的框架并使用此框架在页面之间导航。这样,您将在整个应用程序中保持 kinect 的焦点。

于 2013-07-09T09:43:01.983 回答
0

很大程度上取决于 UninitializeKinectSensor 实际在做什么。不过,作为一种快速修复方法,您可以尝试在后台工作人员上调用 uninitialize,看看是否有帮助。

于 2013-07-09T20:09:08.570 回答
0

不要使用“Show()”,而是使用“ShowDialog()”。如果您可以创建一个静态类或方法来初始化和未初始化的 kinect,那就更好了。

public static void start()
        {
            KinectSensor.KinectSensors.StatusChanged += kinectSensorsStatusChanged;
            DiscoverSensor();
        }


 private static void kinectSensorsStatusChanged(object sender, StatusChangedEventArgs e)
        {

            KinectSensor oldSensor = Kinect;
            if (oldSensor != null)
            {
                UninitializeKinect();
            }
            var status = e.Status;
            if (Kinect == null)
            {
                //updateStatus(status);
                if (e.Status == KinectStatus.Connected)
                {

                    Kinect = e.Sensor;
                    DiscoverSensor();
                }
            }
            else
            {
                if (Kinect == e.Sensor)
                {
                    //updateStatus(status);
                    if (e.Status == KinectStatus.Disconnected ||
                        e.Status == KinectStatus.NotPowered)
                    {
                        Kinect = null;
                        sensorConflict = false;
                        DiscoverSensor();
                    }
                }
            }

        }

private static DispatcherTimer readyTimer;

private static void UninitializeKinect()
        {
            if (speechRecognizer != null && Kinect != null)
            {
                Kinect.AudioSource.Stop();
                Kinect.SkeletonFrameReady -= kinect_SkeletonFrameReady;
                Kinect.SkeletonStream.Disable();
                Kinect.Stop();
                //this.FrameSkeletons = null;
                speechRecognizer.RecognizeAsyncCancel();
                speechRecognizer.RecognizeAsyncStop();
            }

            if (readyTimer != null)
            {
                readyTimer.Stop();
                readyTimer = null;
            }
        }
于 2013-07-22T08:07:13.003 回答