コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
 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();
         }
     }
 }