Ну конечно, но вам понадобится фоновый поток для фактической обработки.По сути, просто сделайте так, чтобы ваш консольный процесс запускал синтаксический анализ вашего файла в фоновом потоке, а затем, пока он работает, проходите цикл проверки нажатия клавиши и оператора Thread.Yield ().Если клавиша была нажата, получите обновление статуса от некоторого класса, фоновый поток обновляет, как это работает:
private static StatusObject Status;
public static void main(params string[] args)
{
var thread = new Thread(PerformProcessing);
Status = new StatusObject();
thread.Start(Status);
while(thread.IsAlive)
{
if(keyAvailable)
if(Console.ReadKey() == ' ')
ShowStatus(Status);
//This is necessary to ensure that this main thread doesn't monopolize
//the CPU going through this loop; let the background thread work a while
Thread.Yield();
}
thread.Join();
}
public void PerformProcessing(StatusObject status)
{
//do your file parsing, and at significant stages of the process (files, lines, etc)
//update the StatusObject with vital info. You will need to obtain a lock.
}
public static void ShowStatus(StatusObject status)
{
//lock the StatusObject, get the information from it, and show it in the console.
}