首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Console.Writeline()不工作

Console.Writeline()不工作
EN

Stack Overflow用户
提问于 2009-08-06 19:27:16
回答 7查看 26.9K关注 0票数 8

我正在创建一个c# winforms项目,它可以作为图形用户界面运行,也可以从命令行操作。目前,我可以处理命令行输入和参数。我可以从命令行运行该程序,并且可以使用该程序处理参数。但是Console.Writeline()什么也不做。你知道为什么会这样吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-08-06 19:38:34

有关大部分信息,请参阅answer here。但是,我想指出FreeConsole()应用程序接口调用的存在,它允许您优雅地关闭控制台。

代码语言:javascript
复制
[DllImport("kernel32.dll")]
static extern int FreeConsole() 

我想要注意的一件事是:如果您从现有控制台启动并使用AttachConsole (而不是AllocConsole)附加到控制台输出,您可能会看到一些奇怪的命令提示符出现在控制台输出之前。

这是一个很难解决的时间问题。如果这是一个问题,请将您的应用程序设置为控制台应用程序,就像其他人建议的那样。它的效果是在应用程序关闭之前不会出现命令提示符,但如果您正在打开winform,这可能不是您想要的效果。

回复你的评论:不是AttachConsole就是AllocConsole。我链接的示例首先尝试附加到现有的控制台。如果失败(很可能是因为它不存在),它会创建一个新的控制台窗口。

如果您找到了在命令行行为和GUI交互模式方面兼收并蓄的方法,请让我知道。我还没有对解决方案做任何深入的搜索,但我有一些小应用程序可以从中受益。

顺便说一句:如果您计划在命令行中使用pipes (例如,将输出重定向到文件),不幸的是,它不会像这样工作。

票数 7
EN

Stack Overflow用户

发布于 2013-03-07 01:16:38

您可以使用以下DllImports在windows窗体应用程序中启用控制台:

代码语言:javascript
复制
    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;

    [DllImport("kernel32.dll", SetLastError = true)]
    internal static extern int FreeConsole();

然后,您可以使用以下命令启用控制台:

代码语言:javascript
复制
    AttachConsole(ATTACH_PARENT_PROCESS);

您可以使用以下命令禁用它:

代码语言:javascript
复制
     FreeConsole();
票数 7
EN

Stack Overflow用户

发布于 2009-08-06 19:31:26

这是因为您已经编写了一个winforms应用程序-这意味着System.Console.Out (即标准输出流)被设置为Stream.Null。这意味着对该流的任何调用都将静默失败。

您能够处理来自命令行的输入,因为它们来自不同的流。这个故事的寓意是,你可以拥有winforms应用程序,也可以拥有命令行应用程序,但不能同时拥有这两个应用程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1240867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档