Командная строка WPF
Я пытаюсь создать приложение WPF, которое принимает аргументы командной строки. Если аргументы не заданы, должно появиться главное окно. В случае некоторых конкретных аргументов командной строки код должен выполняться без графического интерфейса и завершаться после завершения. Любые предложения о том, как это должно быть сделано должным образом будут оценены.
4 ответов:
во-первых, найти этот атрибут в верхней части вашего приложения.xaml файл и удалить его:
StartupUri="Window1.xaml"это означает, что приложение не будет автоматически создать главное окно и показать его.
затем переопределите метод 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(); }
чтобы проверить наличие вашего аргумента-в решении Мэтта используйте это для вашего теста:
Эл.Аргументы.Содержит("MyTriggerArg")
сочетание вышеперечисленных решений, для .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); }измените конструктор в главном окне, чтобы принять аргументы:
public partial class MainWindow : Window { public MainWindow(StartupEventArgs e) { InitializeComponent(); } }и не забудьте удалить:
StartupUri="MainWindow.xaml"
Вы можете использовать следующие в
app.xaml.csfile: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 } }
Comments