2012-08-01 10 views
27

Aktualnie pracuję nad aplikacją, która wykonuje pewne operacje na plikach i chcę mieć możliwość manipulacji przez konsolę lub przez interfejs użytkownika (wybrałem WPF).Jak uruchomić WPF na podstawie argumentów

ja dość dużo chcę powiedzieć: (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 
} 

czytałem o kilku różnych sposobów uruchamiania aplikacji WPF okna/programowo jak:

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

Ale ja nie jestem całkowicie pewien, czy chcę po prostu podłączyć to do aplikacji konsolowej.

Czy ktoś ma najlepsze praktyki lub zalecenia dotyczące tego, w jaki sposób mogę to osiągnąć? Główna funkcja przetwarzania znajduje się w utworzonej klasie pomocniczej. Więc zasadniczo chcę albo metody statycznego startu (jak standardowe tworzenie aplikacji konsoli) lub interfejsu użytkownika, aby uzyskać dostęp do klasy Helper w zależności od przekazanych argumentów.

Odpowiedz

75

W klasie aplikacji istnieje zdarzenie "StartUp", z którego można korzystać. Dostarcza ci argumentów podanych w wierszu polecenia. Oto przykład z 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"> 

App.xaml.cs

Mam nadzieję, że to pomoże.

+3

To jest właściwy sposób, aby to zrobić. Zobacz http://msdn.microsoft.com/en-us/library/system.windows.application.startup.aspx – Eugene

+5

Oprócz sugestii powyżej, uważam, że warto zauważyć, że trzeba usunąć właściwość StartupUri w App.xaml, jeśli istnieje. Jeśli tego nie zrobisz, odrodzisz dwie instancje swojego okna. – Tada

15

Istnieją 2 opcje, aby uzyskać argumenty wiersza poleceń
1) Jeśli chcesz przeczytać argumenty OnStartup. Jest to dobre dla globalnego dostępu do args.

Zastąp OnStartup w App.xaml.cs i spójrz na właściwość Args klasy StartupEventArgs.

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

2) Innym łatwym sposobem jest odczytanie argumentów z obiektu środowiska.

Environment.GetCommandLineArgs();

ten może być używany w dowolnym miejscu w aplikacji jak z formy/strona również.

Powiązane problemy