public void Start() { lock (_locker) { if (!_isRunning) { _taskCancellationTokenSource = new CancellationTokenSource(); _keyQueue = new QueueHookConcurrentAsync <object>(_taskCancellationTokenSource.Token); Task.Factory.StartNew(() => { _keyboardEventHook = new KeyboardEventHook(); _keyboardEventHook.KeyDown += KeyGeter; _keyboardEventHook.KeyUp += KeyGeter; _keyboardEventHook.Start(); }, CancellationToken.None, TaskCreationOptions.None, _shf.GetTaskScheduler()).Wait(); Task.Factory.StartNew(ConsumeKeyAsync); _isRunning = true; } } }
public void Stop() { lock (_locker) { if (!_isRunning) { if (_keyboardEventHook != null) { Task.Factory.StartNew(() => { _keyboardEventHook.KeyDown -= KeyGeter; _keyboardEventHook.Stop(); _keyboardEventHook = null; }, CancellationToken.None, TaskCreationOptions.None, _shf.GetTaskScheduler()); } _keyQueue.Enqueue(false); _isRunning = false; _taskCancellationTokenSource.Cancel(); } } }