Frage

Ich versuche, eine WPF-Anwendung zu erstellen, die Befehlszeilenargumente nimmt. Wenn keine Argumente angegeben werden, sollte das Hauptfenster. In Fällen von einigen spezifischen Befehlszeilenargumenten, Code sollte ohne GUI und Ausgang ausgeführt werden, wenn Sie fertig. Alle Vorschläge, wie diese richtig getan werden sollte, würden geschätzt.

War es hilfreich?

Lösung

Zuerst finden Sie dieses Attribut an der Spitze Ihrer App.xaml Datei und entfernen Sie sie:

StartupUri="Window1.xaml"

das bedeutet, dass die Anwendung nicht automatisch Ihre Hauptfenster instanziiert und zeigt es.

Als nächstes überschreiben die OnStartup Methode in Ihrer App-Klasse die Logik auszuführen:

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

Andere Tipps

für die Existenz Ihrer Argumentation zu überprüfen - in Matt-Lösung verwendet dieses für Ihren Test:

e.Args.Contains ( "MyTriggerArg")

Eine Kombination der oben genannten Lösungen, für NET 4.0+ mit Ausgabe an die Konsole:

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

Ändern Sie den Konstruktor in Ihrem Mainwindow Argumente zu akzeptieren:

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

Und vergessen Sie nicht zu entfernen:

StartupUri="MainWindow.xaml"

Sie können die unten in app.xaml.cs Datei:

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
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top