Как начать WPF на основе аргументов
В настоящее время я разрабатываю приложение, которое выполняет некоторые манипуляции с файлами, и я хочу иметь возможность делать манипуляции через консоль или через пользовательский интерфейс (я выбрал WPF).
Я очень хочу сказать: (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
}
Я прочитал несколько разных способов запуска окна/приложения WPF программно, например:
Application app = new Application ();
app.Run(new Window1());
Но я не совсем уверен, что хочу просто подключить его к консольному приложению.
Есть ли у кого-нибудь лучшие практики или рекомендации относительно того, как я могу это достичь? Основная функциональность обработки - это класс Helper, который я создал. Поэтому в основном я либо хочу, чтобы статический метод запуска (например, создание стандартных консольных приложений) или пользовательский интерфейс для доступа к классу помощника в зависимости от переданных аргументов.
Ответы
Ответ 1
В классе Application есть событие "StartUp", которое вы можете использовать. Он предоставляет вам аргументы, которые вы предоставляете с помощью командной строки.
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
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();
}
}
Надеюсь, это поможет.
Ответ 2
Есть два варианта получения аргументов командной строки
1) Если вы хотите прочитать аргументы OnStartup
. Это полезно для глобального доступа args
.
Переопределить OnStartup
в App.xaml.cs
и посмотреть свойство args
класса StartupEventArgs
.
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
foreach (string arg in e.Args)
{
// TODO: whatever
}
base.OnStartup(e);
}
}
2) Еще один простой способ - прочитать аргументы из объекта Environment.
Environment.GetCommandLineArgs();
Это можно использовать в любом месте приложения, например, из формы/страницы.