2013-07-08 2 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(); 
{ 

그래서 한 줄이 새로운 창을 사용하는 것이 무료 수 있습니다 있도록 키 넥트를 초기화 해제하도록되어 있지만, 때를 :

그래서 내가 이것을 사용하고, 새로운 창을 열려면 새 창으로 가고, 키 넥트는 얼어 붙는다. 마우스를 사용하여 첫 번째 창으로 돌아 가면 첫 번째 창에서 마우스가 다시 작동합니다.

나는 또한 어떤 도움을 주시면 더 좋구요

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

초기화 단계에서이 줄을 추가! 나는 그것이 단순한 무엇인가라고 확신한다. 그리고 나는 단지 비참하게 실패했다. XH

+0

단추의 LostFocus 이벤트에서 창을 초기화 취소하고 닫으십시오. – Jack

+0

LostFocus 이벤트 란 무엇입니까? 비주얼 스튜디오 하하에 처음이 신가 – jeddai

답변

1

당신은 정말로 페이지를 사용하는 대신 새로운 창을 만들어야 하느냐?

메인 윈도우에서 모든 창을 차지하고이 프레임을 사용하여 페이지를 탐색하는 프레임을 만듭니다. 이렇게하면 전체 응용 프로그램에서 kinect의 초점을 유지할 수 있습니다.

+0

우리는 페이지를 사용해 보았지만 같은 문제가 발생했습니다 ... – jeddai

+0

어떤 Kinect SDK를 사용하고 있습니까? –

0

UninitializeKinectSensor이 실제로 수행하는 작업에 많이 의존합니다. 빠른 수정과 마찬가지로 백그라운드 작업자에 대해 초기화되지 않음을 호출하여 그 작업이 전혀 도움이되는지 확인할 수 있습니다.

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