Ligne de commande WPF

J’essaie de créer une application WPF qui prend des arguments en ligne de commande. Si aucun argument n’est donné, la fenêtre principale devrait apparaître. Dans le cas de certains arguments de ligne de commande spécifiques, le code doit être exécuté sans interface graphique et quitter lorsque vous avez terminé. Toute suggestion sur la manière de procéder devrait être appréciée.

Tout d’abord, trouvez cet atsortingbut en haut de votre fichier App.xaml et supprimez-le:

StartupUri="Window1.xaml" 

Cela signifie que l’application n’instanciera pas automatiquement votre fenêtre principale et ne l’affichera pas.

Ensuite, remplacez la méthode OnStartup dans votre classe App pour exécuter la logique:

 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(); } 

Pour vérifier l’existence de votre argument – dans la solution de Matt, utilisez ceci pour votre test:

e.Args.Contains (“MyTriggerArg”)

Une combinaison des solutions ci-dessus, pour .NET 4.0+ avec sortie vers la console:

 [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) { ssortingng parameter = e.Args[0].ToSsortingng(); WriteToConsole(parameter); } } Shutdown(); } public void WriteToConsole(ssortingng message) { AttachConsole(-1); Console.WriteLine(message); } 

Modifiez le constructeur dans votre MainWindow pour accepter les arguments:

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

Et n’oubliez pas de supprimer:

 StartupUri="MainWindow.xaml" 

Vous pouvez utiliser le fichier ci-dessous dans le fichier app.xaml.cs :

 private void Application_Startup(object sender, StartupEventArgs e) { MainWindow WindowToDisplay = new MainWindow(); if (e.Args.Length == 0) { WindowToDisplay.Show(); } else { ssortingng FirstArgument = e.Args[0].ToSsortingng(); ssortingng SecondArgument = e.Args[1].ToSsortingng(); //your logic here } }