Вот простая рабочая демонстрация, которая показывает многострочное использование без мерцания.Он показывает текущее время и случайную строку каждую секунду.
private static void StatusUpdate()
{
var whiteSpace = new StringBuilder();
whiteSpace.Append(' ', 10);
var random = new Random();
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var randomWord = new string(Enumerable.Repeat(chars, random.Next(10)).Select(s => s[random.Next(s.Length)]).ToArray());
while (true)
{
Console.SetCursorPosition(0, 0);
var sb = new StringBuilder();
sb.AppendLine($"Program Status:{whiteSpace}");
sb.AppendLine("-------------------------------");
sb.AppendLine($"Last Updated: {DateTime.Now}{whiteSpace}");
sb.AppendLine($"Random Word: {randomWord}{whiteSpace}");
sb.AppendLine("-------------------------------");
Console.Write(sb);
Thread.Sleep(1000);
}
}
В приведенном выше примере предполагается, что ваше окно консоли пусто для запуска.Если нет, сначала используйте Console.Clear ().
Техническое примечание: SetCursorPosition (0,0) помещает курсор обратно на вершину (0,0), поэтому следующий вызов Console.Write начнется со строки 0, символ 0.Обратите внимание, что предыдущий контент не удаляется перед записью.Например, если вы напишите «asdf» поверх предыдущей строки, такой как «0123456», вы получите что-то вроде «asdf456» в этой строке.По этой причине мы используем переменную whiteSpace, чтобы гарантировать, что любые оставшиеся символы из предыдущей строки будут перезаписаны пробелами.Отрегулируйте длину переменной whiteSpace в соответствии с вашими потребностями.Вам нужна переменная whiteSpace только для строк, которые меняются.
Личное примечание: Для моих целей я хотел показать текущее состояние приложений (раз в секунду) вместе с кучей другой информации о состоянии, и я хотел избежать любых раздражающих мерцаний, которые могутслучается, когда вы используете Console.Clear ().В моем приложении я запускаю обновления своего статуса в отдельном потоке, поэтому он постоянно предоставляет обновления, несмотря на то, что у меня одновременно работают многочисленные другие потоки и долго выполняющиеся задачи.к предыдущим постерам и dtb для генератора случайных строк, используемого в демо. Как я могу генерировать случайные буквенно-цифровые строки в C #?