100

我正在尝试创建一个采用命令行参数的 WPF 应用程序。如果没有给出参数,主窗口应该弹出。在某些特定命令行参数的情况下,代码应该在没有 GUI 的情况下运行并在完成后退出。任何有关如何正确完成此操作的建议将不胜感激。

4

4 回答 4

160

首先,在 App.xaml 文件的顶部找到此属性并将其删除:

StartupUri="Window1.xaml"

这意味着应用程序不会自动实例化您的主窗口并显示它。

接下来,重写 App 类中的 OnStartup 方法以执行逻辑:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if ( /* test command-line params */ )
    {
        /* do stuff without a GUI */
    }
    else
    {
        new Window1().ShowDialog();
    }
    this.Shutdown();
}
于 2009-01-08T23:13:48.520 回答
26

要检查您的论点是否存在 - 在马特的解决方案中,请使用以下方法进行测试:

e.Args.Contains("MyTriggerArg")

于 2009-08-13T14:05:55.810 回答
5

上述解决方案的组合,用于 .NET 4.0+ 并输出到控制台:

[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processID);

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if (e.Args.Contains("--GUI"))
    {
        // Launch GUI and pass arguments in case you want to use them.
        new MainWindow(e).ShowDialog();
    }
    else
    {
        //Do command line stuff
        if (e.Args.Length > 0)
        {
            string parameter = e.Args[0].ToString();
            WriteToConsole(parameter);
        }
    }
    Shutdown();
}

public void WriteToConsole(string message)
{
    AttachConsole(-1);
    Console.WriteLine(message);
}

更改 MainWindow 中的构造函数以接受参数:

public partial class MainWindow : Window
{
    public MainWindow(StartupEventArgs e)
    {
        InitializeComponent();
    }
}

并且不要忘记删除:

StartupUri="MainWindow.xaml"
于 2016-11-29T21:17:36.207 回答
1

您可以在app.xaml.cs文件中使用以下内容:

private void Application_Startup(object sender, StartupEventArgs e)
{
    MainWindow WindowToDisplay = new MainWindow();

    if (e.Args.Length == 0)
    {
        WindowToDisplay.Show();
    }
    else
    {
        string FirstArgument = e.Args[0].ToString();
        string SecondArgument = e.Args[1].ToString();
        //your logic here
    }
}
于 2013-12-06T13:17:31.533 回答