c# - 在分配控制台之前调用 Console.WriteLine

标签 c# console console.writeline

我最近在我的应用程序中遇到了以下问题:它没有显示任何控制台输出,尽管控制台是使用 AllocConsole 分配的。我设法很快弄清楚它是由在调用 AllocConsole 之前尝试(隐藏在代码中)写入控制台引起的。所以它看起来像这样:

Console.WriteLine("Foo"); // no console allocated yet
AllocConsole();           // console window appears
Console.WriteLine("Bar"); // expecting "Bar" in the console, but the console is blank

所以我的问题是:为什么会发生这种情况?我没有看到任何异常(exception)情况(尽管我想它们在那里)。

最佳答案

第一次使用 Console.WriteLine 时,Console 类会创建一个 TextWriter 并将其与 Console.Out 相关联 属性。它执行此操作的方法是使用 Win32 打开与标准输出 文件句柄关联的低级文件句柄。如果标准输出句柄无效,Console.Out 设置为 TextWriter.Null ,它会丢弃所有输出。

Win32 AllocConsole 函数创建并设置标准输出句柄,因此在调用它之后标准输出句柄要么不同要么现在有效。无论哪种情况,Console.Out 都已设置为使用 标准输出或丢弃所有输出。

要在调用 AllocConsole 后强制重新打开 Console.Out,您可以使用此方法:

关于c# - 在分配控制台之前调用 Console.WriteLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7537279/

相关文章:

c# - 我的类应该实现什么接口(interface)或方法来在 Console.WriteLine 中打印我想要的内容?

javascript - 麻烦它给我 404(未找到) - 在我点击提交后

c# - 模拟 GetExternalLoginInfoAsync() 方法

c# - CSS3 动画 无效果

python - 附加到上一行

python - 防止 Python 中的编码错误

c# - 获取到 Console.WriteLine 的事件 Hook

c# - 将可空值列表转换为对象列表

javascript - 如何在每一行代码上设置断点?

c# - 命名参数 Console.WriteLine c#