2013-10-12 5 views
1

Я обнаружил странную ошибку при работе с консольным приложением C# в Xamarin Studio на OS X 10.7.5. Если я изменил цвет фона на одной итерации цикла, цвет будет иногда сбрасываться, если перед этим еще есть цикл. Например:Цвет фона Консоли в цикле зависит от предыдущего цикла

for (int i = 0; i < 18; i++) { 
    Console.WriteLine (i); 
} 
for (int i = 0; i < 8; i++) { 
    if (i == 5) { 
     Console.BackgroundColor = ConsoleColor.Green; 
     Console.WriteLine ("green"); 
     Console.ResetColor(); 
    } else { 
     Console.WriteLine (i); 
    } 
} 

Если вы запустите этот код, зеленый фон перепрыгнет через линию. Если вы, однако, измените первый цикл на 17 раз (или меньше) вместо 18, этого больше не будет. Я предполагаю, что это может быть связано с терминальным окном, и вы, возможно, не сможете его воспроизвести, вот скриншот из того, что я получаю: http://i.imgur.com/2WeaZ4k.png

Кто-нибудь знает, почему линия скачет так и как ее можно предотвратить ? Благодаря!

+0

У меня та же проблема на Windows (Visual Studio) –

ответ

0

У меня была аналогичная проблема, и команда флеша заставила его уйти. Посмотрите, будет ли этот бит кода работать для вас.

public static void WriteInColor(string format, ConsoleColor foreground, ConsoleColor background, params object[] args) 
    { 
     ConsoleColor prevForeground = Console.ForegroundColor; 
     ConsoleColor prevBackground = Console.BackgroundColor; 
     Console.ForegroundColor = foreground; 
     Console.BackgroundColor = background; 
     Console.Write(format, args); 
     Console.ForegroundColor = prevForeground; 
     Console.BackgroundColor = prevBackground; 
     Console.Out.Flush(); 
    } 
+0

Вы не получите много из смыва кроме того вы можете слегка изменить время: http://referencesource.microsoft.com/#mscorlib /system/io/__consolestream.cs,109 – poizan42

Смежные вопросы