我最近在我的应用程序中遇到了以下问题:它没有显示任何控制台输出,尽管控制台是使用 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/