/// <summary> /// Frees resources. /// </summary> public void Dispose() { // Resume if Paused _continueCapturing?.Set(); // Video _stopCapturing.Set(); _recordThread.Join(); _imageProvider.Dispose(); _videoEncoder.Dispose(); }
/// <summary> /// Override this method with the code to stop recording. /// </summary> protected override void OnStop() { // Resume if Paused _continueCapturing?.Set(); // Video if (_recordThread != null) { if (_stopCapturing != null && !_stopCapturing.SafeWaitHandle.IsClosed) { _stopCapturing.Set(); } if (!_recordThread.Join(500)) { _recordThread.Abort(); } _recordThread = null; } if (_imageProvider != null) { _imageProvider.Dispose(); _imageProvider = null; } // WaitHandles if (_stopCapturing != null && !_stopCapturing.SafeWaitHandle.IsClosed) { _stopCapturing.Dispose(); _stopCapturing = null; } if (_continueCapturing != null && !_continueCapturing.SafeWaitHandle.IsClosed) { _continueCapturing.Dispose(); _continueCapturing = null; } // Writers if (_videoEncoder == null) { return; } _videoEncoder.Dispose(); _videoEncoder = null; }
void Dispose(bool ErrorOccured) { // Resume if Paused _continueCapturing?.Set(); _stopCapturing.Set(); if (!ErrorOccured) { _recordTask.Wait(); } _imageProvider.Dispose(); _videoEncoder.Dispose(); }