Обнаружение клавиши Shift в любой момент во время выполнения консольного приложения - PullRequest
1 голос
/ 27 мая 2010

Я хотел бы, чтобы мое консольное приложение работало некоторое время, чтобы дать пользователю некоторые параметры в конце, если в в любое время во время процесса пользователь нажал клавишу Shift. Это возможно?

Ответы [ 2 ]

2 голосов
/ 01 июня 2010

Я изменил бесконечный цикл на тот, который ищет флаг, установленный после завершения моего процесса. Я также изменил способ поиска клавиши Shift, потому что он не выглядел так, как будто Console.ReadKey () что-то делал для Shift. Я все еще буду отдавать должное Рону за то, что он поднял тему. Этот код проверен нормально:

  Dim thread As New System.Threading.Thread(AddressOf Generate)
  thread.Start()

  While _generating
   System.Threading.Thread.Sleep(10)

   If (System.Windows.Forms.Control.ModifierKeys And Windows.Forms.Keys.Shift) = Windows.Forms.Keys.Shift Then
    _showOptions = True
   End If
  End While
2 голосов
/ 27 мая 2010

Конечно, запустите ваши задачи обработки в другом потоке, одновременно запрашивая ввод с консоли с ReadKey ( MSDN ) в вашем основном потоке.

Thread thread = new Thread(() => DoWork());
thread.Start();

while (true) {
  Thread.Sleep(10);
  var keyInfo = Console.ReadKey();

  if ((keyInfo.Modifiers & ConsoleModifiers.Shift) != 0) {
    // take note of shift
  }
}

Если многопоточность не является опцией (она должна быть), вам придется периодически прерывать вашу обработку, чтобы проверить ввод ключа, или вы можете создать скрытое окно и обрабатывать ключи через него.

...