Esempio n. 1
0
        /// <summary>
        /// Frees resources.
        /// </summary>
        public void Dispose()
        {
            // Resume if Paused
            _continueCapturing?.Set();

            // Video
            _stopCapturing.Set();
            _recordThread.Join();
            _imageProvider.Dispose();

            _videoEncoder.Dispose();
        }
Esempio n. 2
0
        /// <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();
        }