Pregunta

Estoy intentando crear una aplicación WPF que tome argumentos de línea de comando. Si no se dan argumentos, la ventana principal debería aparecer. En casos de algunos argumentos específicos de la línea de comandos, el código debe ejecutarse sin GUI y salir cuando haya terminado. Cualquier sugerencia sobre cómo se debe hacer esto correctamente sería apreciada.

¿Fue útil?

Solución

Primero, encuentre este atributo en la parte superior de su archivo App.xaml y elimínelo:

StartupUri="Window1.xaml"

Eso significa que la aplicación no instanciará automáticamente su ventana principal y la mostrará.

A continuación, anule el método OnStartup en su clase de aplicación para realizar la lógica:

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

Otros consejos

Para verificar la existencia de su argumento, en la solución de Matt use esto para su prueba:

e.Args.Contains (" MyTriggerArg ")

Una combinación de las soluciones anteriores, para .NET 4.0+ con salida a la consola:

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

Altere el constructor en su MainWindow para aceptar argumentos:

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

Y no olvides eliminar:

StartupUri="MainWindow.xaml"

Puede usar lo siguiente en el archivo 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
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top