private static void HandleKeysFromEventPatternWithOperators()
        {
            var keyLogger  = new EventedKeyWatcher();
            var observable = Observable.FromEventPattern <KeyEventArgs>(
                keyLogger, nameof(EventedKeyWatcher.KeyLogged));
            var operationObservable = observable
                                      .Select(e => e.EventArgs.Key)
                                      .Buffer(Program.BufferCount, Program.BufferSkip)
                                      .Delay(TimeSpan.FromSeconds(2));

            using (var subscription = observable.Subscribe(
                       pattern =>
            {
                if (Program.CheckForTermination(pattern.EventArgs.Key))
                {
                    keyLogger.Cancel();
                }
            }))
            {
                using (var operationSubscription = operationObservable.Subscribe(
                           operationPattern =>
                {
                    Console.Out.WriteLine(operationPattern.ToArray());
                }))
                {
                    keyLogger.Listen();
                }
            }
        }
 private static void UseSimpleKeyWatcher()
 {
     using (var keyLogger = new EventedKeyWatcher())
     {
         keyLogger.KeyLogged += (s, e) => Console.Write(e.Key);
         Application.Run();
     }
 }
        private static void HandleKeysViaEvents()
        {
            var keyLogger = new EventedKeyWatcher();

            keyLogger.KeyLogged += (s, e) =>
            {
                Console.Write(e.Key);
                if (Program.CheckForTermination(e.Key))
                {
                    keyLogger.Cancel();
                }
            };
            keyLogger.Listen();
        }
		static void Main(string[] args)
		{
			using (var keyLogger = new EventedKeyWatcher())
			{
				using (var observable = Observable.FromEventPattern<KeyEventArgs>(
					keyLogger, nameof(EventedKeyWatcher.KeyLogged))
					.Where(pattern => Program.Keys.Contains(pattern.EventArgs.Key))
					.Take(10)
					.Subscribe(pattern => Console.Out.Write(pattern.EventArgs.Key)))
				{
					Application.Run();
				}
			}
		}
        private static void HandleKeysFromEventPattern()
        {
            var keyLogger  = new EventedKeyWatcher();
            var observable = Observable.FromEventPattern <KeyEventArgs>(
                keyLogger, nameof(EventedKeyWatcher.KeyLogged));

            using (var subscription = observable.Subscribe(
                       pattern =>
            {
                var key = pattern.EventArgs.Key;
                Console.Out.Write(key);
                if (Program.CheckForTermination(key))
                {
                    keyLogger.Cancel();
                }
            }))
            {
                keyLogger.Listen();
            }
        }