public void Stop() { lock (_locker) { if (_isRunning) { if (_mouseHook != null) { Task.Factory.StartNew(() => { _mouseHook.MouseAction -= MouseGetter; _mouseHook.Stop(); _mouseHook = null; }, CancellationToken.None, TaskCreationOptions.None, _shf.GetTaskScheduler()); } _mouseQueue.Enqueue(false); _isRunning = false; _taskCancellationTokenSource.Cancel(); } } }
public void Start() { lock (_locker) { if (!_isRunning) { _taskCancellationTokenSource = new CancellationTokenSource(); _mouseQueue = new QueueHookConcurrentAsync <object>(_taskCancellationTokenSource.Token); Task.Factory.StartNew(() => { _mouseHook = new MouseEventHook(); _mouseHook.MouseAction += MouseGetter; _mouseHook.Start(); }, CancellationToken.None, TaskCreationOptions.None, _shf.GetTaskScheduler()).Wait(); Task.Factory.StartNew(() => ConsumeKeyAsync()); _isRunning = true; } } }