private void Track(AsyncStateData asyncData) { asyncData.Running = true; InitOpenNi(asyncData); while (!asyncData.Canceled) { try { _niContext.WaitAndUpdateAll(); // update image metadata _imageNode.GetMetaData(_imageMeta); _depthNode.GetMetaData(_depthMeta); //_sceneNode..GetMetaData(_sceneMeta); GestureGenerator gg = new GestureGenerator(_niContext); gg.AddGesture("Wave"); gg.GestureRecognized += new GestureGenerator.GestureRecognizedHandler(gg_GestureRecognized); gg.StartGenerating(); _depthHist.Update(_depthMeta); // _sceneMap.Update(_sceneMeta); // continue update on UI thread asyncData.AsyncOperation.SynchronizationContext.Send( delegate { // Must be called on the synchronization thread. CopyWritableBitmap(_imageMeta, _rgbImageSource); // CopyWritableBitmap(_depthMeta, _depthImageSource); _depthHist.Paint(_depthMeta, _depthImageSource); //CopyWritableBitmap(_sceneMeta, _sceneImageSource); //_sceneMap.Paint(_sceneMeta, _sceneImageSource); InvokeUpdateViewPort(EventArgs.Empty); }, null); } catch(Exception ex) { System.Diagnostics.Debug.WriteLine("An error has occured in Track: " + ex.Message); } } asyncData.Running = false; asyncData.AsyncOperation.PostOperationCompleted(evt => InvokeTrackinkgCompleted(EventArgs.Empty), null); }