// Kinect's status thread to process freenect's events private static void KinectStatusThread( ) { while (!stopEvent.WaitOne(100, false)) { lock ( openDevices ) { if (openDevices.Count != 0) { // update the status for each open device foreach (DeviceContext deviceContext in openDevices.Values) { if (deviceContext.DeviceFailed) { continue; } if (KinectNative.freenect_update_tilt_state(deviceContext.Device) < 0) { deviceContext.DeviceFailed = true; deviceContext.FireFailureHandlers( ); } else { // get updated device status IntPtr ptr = KinectNative.freenect_get_tilt_state(deviceContext.Device); deviceContext.TiltState = (KinectNative.TiltState) System.Runtime.InteropServices.Marshal.PtrToStructure(ptr, typeof(KinectNative.TiltState)); } } } } // let the kinect library handle any pending stuff on the usb stream KinectNative.freenect_process_events_timeout0(KinectNative.Context); } }