private bool Stop(bool wait)
        {
            if (IsRunning && !_taskStopToken)
            {
                _taskStopToken = true;
                if (wait)
                {
                    _frameCounterTimer.Change(Timeout.Infinite, SECOND_MS);
                    _captureTask.Wait();
                    _captureTask = null;
                    _windowCapture.Dispose();
                    _windowCapture = null;
                    _windowHandle  = IntPtr.Zero;
                    IsRunning      = false;
                }
                else
                {
                    Task.Run(() =>
                    {
                        Stop(true);
                    });
                }
                return(true);
            }

            return(false);
        }
 public DotaWindowCapture(IntPtr windowHandle)
 {
     IsRunning          = false;
     _windowHandle      = windowHandle;
     _windowCapture     = null;
     _captureTask       = null;
     _taskStopToken     = false;
     _frameCounter      = 0;
     _frameCounterTimer = new Timer(FrameCountLoop, null, Timeout.Infinite, SECOND_MS);
 }
        public bool Run()
        {
            if (!IsRunning)
            {
                _taskStopToken = false;
                _windowCapture = new WindowCapture(_windowHandle);
                _captureTask   = Task.Factory.StartNew(CaptureLoop, TaskCreationOptions.LongRunning);
                _frameCounter  = 0;
                _frameCounterTimer.Change(SECOND_MS, SECOND_MS);

                IsRunning = true;

                return(true);
            }

            return(false);
        }
 internal DotaOcvWindowCaptureFrameCapturedEventArgs(WindowCapture windowCapture)
 {
     _windowCapture = windowCapture;
 }