private void Cleanup() { // Detach windows key event handler Window.Current.CoreWindow.KeyUp -= CoreWindowOnKeyUp; // Cancel the processing loop if (_processingTaskCancellationTokenSource != null) { _processingTaskCancellationTokenSource.Cancel(); } // Stop ARToolKit and shutdown if (_arWrapper != null) { _isRunning = false; if (!_arWrapper.arwStopRunning()) { throw new InvalidOperationException("Failed to stop ARToolkit from running."); } if (!_arWrapper.arwShutdownAR()) { throw new InvalidOperationException("Failed to shutdown ARToolkit."); } _arWrapper = null; } _wasStarted = false; }