WPF命令行
我正在尝试创build一个WPF应用程序,它采用命令行参数。 如果没有给出参数,主窗口应该popup。 在某些特定命令行参数的情况下,代码应该在没有GUI的情况下运行,并在完成时退出。 任何build议如何适当做这将不胜感激。
首先,在App.xaml文件的顶部find这个属性并删除它:
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(); }
检查你的论点的存在 – 在马特的解决scheme中使用这个为你的testing:
e.Args.Contains( “MyTriggerArg”)
以上解决scheme的组合,对于.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"
你可以在app.xaml.cs
文件中使用下面的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 } }