【问题标题】:WPF display command line optionsWPF 显示命令行选项
【发布时间】:2013-12-04 19:16:46
【问题描述】:

我需要在我的 WPF 项目中添加命令行选项,我目前有一些作品,但它不是很好。我需要一个看起来更专业的解决方案。

要编写启动和停止,我执行以下操作:

AttachConsole(-1);
Console.WriteLine("Start");
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Stop");

产生输出:

C:\Work>TestWriteCLI.exe -h

C:\Work>Start
Stop

这有几个问题:

  1. 在我运行 exe 后,会在其中创建一个带有 C:\Work> 的新行,我不想要这个,我希望它直接将“开始”打印到控制台。
  2. 显示“Stop”后,程序就在那里等待,等待按下“Enter”,我也不想这样,我只想让它退出。

这是我想要达到的输出:

C:\Work>TestWriteCLI.exe -h
Start
Stop
C:\Work>

这里的其他类似问题提供了我不喜欢的解决方案,例如,我不想创建新的控制台窗口。我有一个控制台,我希望它运行该控制台而不是打开一个新控制台,显示内容,然后关闭它并回到我原来的控制台。

我也不想将我的项目更改为命令行项目。

我的项目是一个 WPF 项目,它应该以命令行项目的正常方式处理命令行选项,如果可能的话,使用 WPF 方法。

非常感谢您在这方面的帮助。

非常感谢

【问题讨论】:

    标签: c# wpf command-line


    【解决方案1】:

    你应该使用Kernel32 assembly中的AllocConsole(),关闭控制台你可以使用FreeConsole()

    在你的类中导入方法

    [DllImport("Kernel32")]
    public static extern void AllocConsole();
    
    [DllImport("Kernel32")]
    public static extern void FreeConsole();
    

    并以这种方式使用它们 -

    AllocConsole();
    Console.WriteLine("Start");
    System.Threading.Thread.Sleep(1000);
    Console.WriteLine("Stop");
    FreeConsole();
    

    【讨论】:

    • 该方法会从我当前的控制台窗口打开一个新的控制台窗口,这是我绝对不想做的事情。您的解决方案会发生什么情况是我从命令行运行我的 exe,然后打开一个新的 cmd 窗口,其中显示启动和停止,然后新窗口关闭,我回到当前的 cmd 窗口。
    • 我没有让 WPF 项目在控制台窗口中运行。那么为什么不创建一个控制台项目呢?
    • 该项目是一个 GUI 项目,它还具有从工程团队签证命令行界面访问它的辅助方式。也许我错过了什么?将其从 Windows 应用程序更改为控制台应用程序有什么影响?
    【解决方案2】:

    对于您的第一个问题,只需使用带有/W/Wait 作为选项的start 命令运行可执行文件,如here 所述:

    C:\Work>start /W TestWriteCLI.exe -h
    

    对于第二个问题,在代码末尾添加以下行:

        System.Windows.Forms.SendKeys.SendWait("{ENTER}"); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多