【问题标题】:Console Application should wait for parameters控制台应用程序应该等待参数
【发布时间】:2019-04-02 12:55:53
【问题描述】:

我有一个与此类似的控制台应用程序:

static void Main(string[] args)
{
   if(args.Length == 0)
   {
      //do something
   }
   else if(args.Length % 2 == 0)
   {
      //do something else
   }
}

现在,当我构建并启动我的 .exe 文件时,它会在眨眼间打开以运行代码并关闭。

.exe启动后会不会等我输入参数?

我知道我可以打开 cmd 并将目录写入我的文件并写入我的参数 (C:\Example\MyExe.exe -Parameter1)。但这是唯一的方法吗?

【问题讨论】:

  • Visual Studio 在项目属性中有一个页面,您可以在其中放置应用的默认参数。否则你需要编写一系列 Console.ReadLine 来直接在应用程序中获取你想要的输入
  • 它不会等待args,因为它们会在您启动应用程序时传递,但您可以使用Console.ReadLine 实现您的应用程序以接受用户输入。
  • 没有显示的代码会使控制台等待输入。与其他一些脚本 IDE 不同,如果您想得到提示,则必须编写代码。如果您的询问是关于如何指示 Visual Studio 为您的应用程序提供命令行参数,那么您应该转到项目属性并在调试选项卡中,有命令行参数框,您可以在其中输入此信息
  • 提示:您可以点击 CTR+F5 (Run without debugger) 来运行控制台应用程序。这将在关闭控制台窗口之前自动等待按键。这样你就不能测试“做其他事情”。

标签: c# parameters arguments console-application


【解决方案1】:

.exe启动后会不会等我输入参数?

它不会等待args,因为这些应该在您启动应用程序时传入,但您可以使用Console.ReadLine 实现您的应用程序以接受用户输入。这是一个例子:

static void Main(string[] args)
{
    if (args.Length == 0)
    {
        List<string> arguments = new List<string>();
        do
        {
            Console.WriteLine("Input argument and press <ENTER>: ");
            string argument = Console.ReadLine();
            if (string.IsNullOrEmpty(argument))
                break;
            arguments.Add(argument);
        } while (true);

        Console.WriteLine("continue...");
    }
    else if (args.Length % 2 == 0)
    {
        //do something else
    }
}

【讨论】:

    【解决方案2】:

    如果您的应用程序打开并立即关闭,那是因为没有“阻塞”方法。您可以在末尾添加一个Console.Read();,等待按键被按下。

    例如:

    static void Main(string[] args)
    {
       if(args.Length == 0)
       {
          //do something
       }
       else if(args.Length % 2 == 0)
       {
          //do something else
       }
    
       Console.WriteLine("Press any key to exit the application.");
       Console.Read();
    }
    

    传参数,我习惯用cmd,直接传参数给exe,不过在VS中可以这样做

    右键项目->属性->调试->命令行参数

    【讨论】:

      【解决方案3】:

      是的,这是唯一的方法,因为参数是在启动应用程序时传递的。

      如果你想调试它,你可以在 Visual Studio 中添加调试参数。为此,右键单击项目并打开项目的设置。然后你可以在调试部分添加它们。

      查看Passing command line parameters with Visual Studio C# 了解更多信息。

      更多信息:如果您想让您的应用程序保持打开状态直到用户按下某个键,您可以为此使用Console.Read();

      【讨论】:

      • 命令行参数看起来很有希望。但我的问题是,可能没有传递任何参数或最多 10 个参数。估计不能用调试参数解决吧?
      • @axbeit 没有参数有什么问题?您的代码if(args.Length == 0) 将被执行。好像你有不止一个问题。您想要启动参数(就像您在代码中使用的那样)还是想要用户输入作为参数?
      • 好的,所以我在命令行参数中输入了这个:'Argument1 Argument2 Argument3'。然后我建立我的项目。双击 MyExe.exe,窗口很快就会弹出并关闭。但我想要它,而不是关闭它,而是让我写我的论点。
      • 看看mm8的答案就知道了。并且更具体地回答您的下一个问题;)当我们知道您想要实现的目标而不是询问您时,这会容易得多。
      【解决方案4】:
      1. 右击默认项目
      2. 选择“属性”
      3. 单击左侧的“调试”选项卡。
      4. 在“命令行参数”中键入您的命令行参数。
      5. 保存更新的属性并运行项目。

      【讨论】:

      • 命令行参数看起来很有希望。但我的问题是,可能没有传递任何参数或最多 10 个参数。估计不能用调试参数解决吧?
      • 在这种情况下,您可以创建第二个应用程序并使用您的参数(或不使用)为您的应用程序运行 Process.Start。
      【解决方案5】:

      如果添加行:

      Console.ReadLine();

      控制台将保持打开状态,直到按下某个键。

      所以你的代码应该是:

      static void Main(string[] args)
      {
         if(args.Length == 0)
         {
            //do something
         }
         else if(args.Length % 2 == 0)
         {
            //do something else
         }
         Console.ReadLine();
      }
      

      要通过 Visual Studio 传递一些参数:右键单击项目 -> Properties -> Debug -> Command Line Arguments

      【讨论】:

        【解决方案6】:

        在 else if() {} 完成后编写 Console.Readkey()...

        在您按下回车之前,控制台不会关闭

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-21
          • 2019-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-18
          相关资源
          最近更新 更多