Да, есть способ чтения / записи в одно и то же время. Есть несколько способов сделать это:
Использовать другую тему:
Сначала вы запускаете поток, отвечающий за запись в консоль.
Thread t = new Thread(()=>{RunSimulation();});
t.IsBackground = true;
t.Start();
Метод моделирования будет выглядеть примерно так:
public void RunSimulation()
{
while(running)
{
// Puts the thread to sleep depending on the run speed
Thread.Sleep(delayTime);
Console.WriteLine("Write your output to console!");
}
}
Во-вторых, вы можете постоянно разрешать основному потоку опрашивать вводимые пользователем данные для внесения изменений.
string input = string.Empty;
while(input.Equals("x", StringComparison.CurrentCultureIgnoreCase)
{
input = Console.ReadKey();
switch(input)
{
case "+":
// speeds up the simulation by decreasing the delayTime
IncreaseSpeed();
break;
case "-":
// slows down the simulation by decreasing the delayTime
DecreaseSpeed();
break;
default:
break;
}
}
Использование таймера:
Другой подход заключается в использовании Timer и настройке частоты обратных вызовов по таймеру вместо регулировки времени ожидания в потоке:
// Create the timer
System.Timers.Timer aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnPrintSimulationResult);
// Change the Interval to change the speed of the simulation
aTimer.Interval = 2000; // <-- Allows you to control the speed of the simulation
aTimer.Enabled = true;
Конечно, вы должны иметь дело с безопасностью потоков, но это должно дать вам достойное место для начала. Вы можете вернуться, как только попробуете один из этих подходов, и у вас возникнет конкретная проблема, я уверен, что люди будут рады решить любые ваши конкретные проблемы. Обратите внимание, что это не будет очень изящно выглядящим решением сделать это в консоли, но это будет работать. Если вы хотите что-то более изящное, просто создайте приложение с графическим интерфейсом, которое имеет текстовую область, перенаправьте консольный вывод в текстовую область и добавьте 2 кнопки (+/-) для регулировки скорости.