Console.WriteLine偶发不换行问题:排查与解决咨询
Console.WriteLine() 输出未换行导致内容同行的问题解决建议
问题现象
开发应用时发现,调用Console.WriteLine()并非每次都能正常换行——写入的字符串未被换行符终止,导致下一次Console.WriteLine()的输出会出现在同一行。
复现代码
@Wyck提供了更简洁的复现代码:
for (var i = 0; i < 30; i++) Console.WriteLine(i.ToString().PadRight(100 + i, 'a'));
以下是包含额外逻辑的原始测试代码:
internal class Program { static void Main(string[] args) { var rnd = new Random(); for (var i = 0; i < 200; i++) { Thread.Sleep(rnd.Next(0, 10)); var str = i.ToString().PadRight(rnd.Next(90, 130), 'a'); switch (rnd.Next(0, 3)) { case 0: ConsoleEx.WriteLineInfo(str); break; case 1: ConsoleEx.WriteLineWarning(str); break; case 2: ConsoleEx.WriteLineError(str); break; } } Console.ReadKey(); } } internal static class ConsoleEx { #region Static Public Methods public static void WriteLine(string str, ConsoleColor foregroundColor) { //var oldForegroundColor = Console.ForegroundColor; //Console.ForegroundColor = foregroundColor; Console.WriteLine(str); //Console.ForegroundColor = oldForegroundColor; } public static void WriteLineError(string str) => WriteLine(str, ConsoleColor.Red); public static void WriteLineInfo(string str) => WriteLine(str, ConsoleColor.Green); public static void WriteLineWarning(string str) => WriteLine(str, ConsoleColor.Yellow); #endregion }
触发条件观察
- 仅运行生成的
.exe文件时能复现,调试环境下从未出现; - 使用输出重定向
ConsoleApp.exe > output.txt时无法复现; - 修改
Console.ForegroundColor不会引发该错误。
推测问题可能与使用的Windows Terminal版本1.16.10262.0相关。
解决建议
临时规避方案
- 手动在输出字符串末尾追加换行符,比如改用
Console.WriteLine(str + Environment.NewLine)(注意:终端正常时可能出现重复换行,可根据运行环境做判断); - 切换到传统命令提示符(cmd.exe)运行程序,验证是否仅Windows Terminal存在该问题;
- 将Windows Terminal更新至最新版本,查看是否已修复此bug。
官方反馈
若更新Windows Terminal后问题仍存在,且确认是终端的兼容性问题,建议提交bug到官方仓库。
内容的提问来源于stack exchange,提问作者Rand Random
相关产品推荐
相关产品推荐

