WPF starten op basis van argumenten

Ik ben momenteel bezig met het ontwikkelen van een applicatie die enige bestandsmanipulatie uitvoert en ik wil de manipulatie kunnen doen via de console of via een gebruikersinterface (ik koos voor WPF).

Ik wil eigenlijk zeggen: (psuedo)

if ( Environment.GetCommandLineArgs().Length > 0 )
{
    //Do not Open WPF UI, Instead do manipulate based
    //on the arguments passed in
}
else
{
    //Open the WPF UI
}

Ik heb gelezen over een paar verschillende manieren om het WPF-venster/-toepassing programmatisch te starten, zoals:

Application app = new Application ();
app.Run(new Window1());

Maar ik weet niet helemaal zeker of ik dit gewoon in een consoletoepassing wil pluggen.

Heeft iemand praktische tips of aanbevelingen over hoe ik dit kan bereiken? De belangrijkste verwerkingsfunctionaliteit bevindt zich in een Helper-klasse die ik heb gemaakt. Dus eigenlijk wil ik ofwel een statische startmethode (zoals de standaard Console Application maakt) of de gebruikersinterface om toegang te krijgen tot de Helper-klasse, afhankelijk van de ingevoerde argumenten.


Antwoord 1, autoriteit 100%

In de klasse Applicationis er een gebeurtenis “StartUp” die u kunt gebruiken . Het biedt u de argumenten die u verstrekt via de opdrachtprompt. Hier is een voorbeeld van MSDN:

App.xaml

<Application x:Class="WpfApplication99.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Startup="App_Startup">
</Application>

App.xaml.cs

public partial class App : Application
{
    void App_Startup(object sender, StartupEventArgs e)
    {
        // Application is running
        // Process command line args
        bool startMinimized = false;
        for (int i = 0; i != e.Args.Length; ++i)
        {
            if (e.Args[i] == "/StartMinimized")
            {
                startMinimized = true;
            }
        }
        // Create main application window, starting minimized if specified
        MainWindow mainWindow = new MainWindow();
        if (startMinimized)
        {
            mainWindow.WindowState = WindowState.Minimized;
        }
        mainWindow.Show();
    }
}

Ik hoop dat dit zal helpen.


Antwoord 2, autoriteit 27%

Er zijn 2 opties om de opdrachtregelargumenten op te halen

1) Als je de argumenten OnStartupwilt lezen. Dit is goed voor globale toegang van de Args.

Overschrijf OnStartupin App.xaml.csen bekijk de eigenschap Argsvan de klasse StartupEventArgs.

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        foreach (string arg in e.Args)
        {
            // TODO: whatever
        }
        base.OnStartup(e);
    }
}

2) Een andere gemakkelijke manier is om de argumenten van het Omgevingsobject te lezen.

Omgeving.GetCommandLineArgs();

Dit kan overal in de applicatie worden gebruikt, zoals ook vanaf het formulier / de pagina.

Other episodes