当前位置: 首页 > 编程语言 > C#

在分配控制台前调用Console.WriteLine分享

时间:2023-04-10 14:25:07 C#

CallingConsole.WriteLineBeforeAllocatingaConsole我最近在我的应用程序中遇到了以下问题:虽然控制台是使用AllocConsole分配的,但它没有显示任何控制台输出.我很快发现这是由于在调用AllocConsole之前尝试(深深隐藏在代码中)写入控制台造成的。所以它看起来像这样:Console.WriteLine("Foo");//还没有分配控制台AllocConsole();//控制台窗口出现Console.WriteLine("Bar");//在控制台中期待“Bar”,但控制台是空白的所以我的问题是:为什么会发生这种情况?我没有看到任何例外情况(尽管我认为它们在那里)。第一次使用Console.WriteLine时,Console类创建一个TextWriter并将其与Console.Out属性相关联。它这样做的方法是使用Win32打开与标准输出文件句柄关联的低级文件句柄。如果标准输出句柄无效,Console.Out将设置为TextWriter.Null,这会丢弃所有输出。Win32AllocConsole函数创建并设置标准输出句柄,因此在调用它之后,标准输出句柄要么不同,要么现在有效。在任何一种情况下,Console.Out都已设置为使用旧标准输出或丢弃所有输出。要在调用AllocConsole后强制重新打开Console.Out,您可以使用此方法:可能是因为Console类的静态构造函数在您第一次调用Console.WriteLine时设置了输出流。由于没有连接控制台,因此没有标准输出句柄,因此输出被路由到bitbucket。当您稍后调用AllocConsole时,Console类中的任何内容都不会通知控制台现在存在。它没有机会将Console.Out附加到新创建的stdout句柄。一个进程只能与一个控制台相关联,因此如果调用进程已经有一个控制台,则AllocConsole函数将失败。控制台应用程序已经有一个控制台。详情看这里以上是C#学习教程:在分配控制台前调用Console.WriteLine,分享所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处: