Конечно, запустите ваши задачи обработки в другом потоке, одновременно запрашивая ввод с консоли с 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
}
}
Если многопоточность не является опцией (она должна быть), вам придется периодически прерывать вашу обработку, чтобы проверить ввод ключа, или вы можете создать скрытое окно и обрабатывать ключи через него.