我正在创建一个c# winforms项目,它可以作为图形用户界面运行,也可以从命令行操作。目前,我可以处理命令行输入和参数。我可以从命令行运行该程序,并且可以使用该程序处理参数。但是Console.Writeline()什么也不做。你知道为什么会这样吗?
发布于 2009-08-06 19:38:34
有关大部分信息,请参阅answer here。但是,我想指出FreeConsole()应用程序接口调用的存在,它允许您优雅地关闭控制台。
[DllImport("kernel32.dll")]
static extern int FreeConsole() 我想要注意的一件事是:如果您从现有控制台启动并使用AttachConsole (而不是AllocConsole)附加到控制台输出,您可能会看到一些奇怪的命令提示符出现在控制台输出之前。
这是一个很难解决的时间问题。如果这是一个问题,请将您的应用程序设置为控制台应用程序,就像其他人建议的那样。它的效果是在应用程序关闭之前不会出现命令提示符,但如果您正在打开winform,这可能不是您想要的效果。
回复你的评论:不是AttachConsole就是AllocConsole。我链接的示例首先尝试附加到现有的控制台。如果失败(很可能是因为它不存在),它会创建一个新的控制台窗口。
如果您找到了在命令行行为和GUI交互模式方面兼收并蓄的方法,请让我知道。我还没有对解决方案做任何深入的搜索,但我有一些小应用程序可以从中受益。
顺便说一句:如果您计划在命令行中使用pipes (例如,将输出重定向到文件),不幸的是,它不会像这样工作。
发布于 2013-03-07 01:16:38
您可以使用以下DllImports在windows窗体应用程序中启用控制台:
[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();然后,您可以使用以下命令启用控制台:
AttachConsole(ATTACH_PARENT_PROCESS);您可以使用以下命令禁用它:
FreeConsole();发布于 2009-08-06 19:31:26
这是因为您已经编写了一个winforms应用程序-这意味着System.Console.Out (即标准输出流)被设置为Stream.Null。这意味着对该流的任何调用都将静默失败。
您能够处理来自命令行的输入,因为它们来自不同的流。这个故事的寓意是,你可以拥有winforms应用程序,也可以拥有命令行应用程序,但不能同时拥有这两个应用程序。
https://stackoverflow.com/questions/1240867
复制相似问题