2013-07-08 32 views
0

因此,我正在使用按鈕製作Kinect應用程序,並導航應用程序,我正在爲每個按鈕創建新窗口。我遇到了一個我一直無法找到任何幫助的問題,並希望得到任何幫助。Kinect新窗口Wpf

所以要打開新的窗口,我使用的是這樣的:

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

+0

嘗試Unintialize並關閉按鈕的LostFocus事件上的窗口。 – Jack

+0

什麼是LostFocus活動?有點新的Visual Studio哈哈 – jeddai

回答

1

你真的必須創建一個新的窗口,而不是使用頁面?

在你的MainWindow中,你創建一個框架,它接受所有的窗口並使用這個框架在頁面之間導航。這樣,您將在整個應用程序中保留kinect的重點。

+0

我們嘗試使用頁面,但遇到了同樣的問題... – jeddai

+0

你使用哪個Kinect SDK? –

0

取決於UninitializeKinectSensor實際執行的操作。然而,就像一個快速修復,你可以嘗試在後臺工作者上調用uninitialize,看看是否有幫助。

+0

從我們所知道的情況來看,它實際上關閉了Kinect,直到我們重新啓動程序,它纔會停止。所以我現在想的是,如果我可以找到一個父母/孩子兩個窗口的方式,它可能會工作。 – jeddai

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; 
      } 
     }