Аргументы командной строки WPF, умный способ? - PullRequest
41 голосов
/ 18 февраля 2012

Я ищу способ, которым я могу проанализировать аргументы командной строки в своем приложении WPF с помощью простого способа чтения значения аргумента, который передал пользователь.

Как пример

application.exe /setTime 5

есть ли у меня способ написать код, где я могу просто сказать:

MessageBox.Show(arg("setTime"));

Который выдаст 5

Рабочий раствор

Как создать умные аргументы командной строки WPF

Ответы [ 2 ]

90 голосов
/ 18 февраля 2012

Я всегда делаю это, указав аргументы в виде пары «имя» / «значение», например,

myprogram.exe -arg1 value1 -arg2 value2

Это означает, что при разборе командной строки вы можете поместить аргумент / значениепары в Dictionary с аргументом в качестве ключа.Тогда ваш arg("SetTime") станет:

MessageBox.Show(dictionary["SetTime"]);

(Очевидно, вы не хотите, чтобы фактический словарь был общедоступным.)

Чтобы получить аргументы в первую очередь, вы можете использовать:

string[] args = Environment.GetCommandLineArgs();

Это вернет все аргументы, поэтому вам нужно будет проанализировать массив с шагом два (после первой проверки, что длина кратна двум + 1):

Первый элемент массива - это имя исполняемой программы - Страница MSDN - поэтому ваш цикл должен начинаться с одного:

for (int index = 1; index < args.Length; index += 2)
{
     dictionary.Add(args[index], args[index+1]);
}

. Этот цикл выполняется в два этапа, как вы определяете каждыйАргумент - это пара значений: идентификатор и само фактическое значение, например,

my.exe -arg1 value1 -arg2 value2

. Затем вы можете просто увидеть, указан ли аргумент, увидев, находится ли ключ -arg1 в словаре, и затем прочитатьэто значение:

string value;
if (dictionary.TryGetValue(arg, out value))
{
    // Do what ever with the value
}

Это означает, что вы можете иметь аргументы в любом порядке и опустить любые аргументы, которые вы не хотите указывать.

0 голосов
/ 16 апреля 2019

Есть другой способ сделать это в WPF.Вот статья об этом, и вот шаги, которые нужно предпринять:

Сначала вы открываете App.xaml и добавляете Startup="Application_Startup" после StartupUri="Window1.xaml", так что ваш App.xaml будетвыглядит следующим образом:

<Application x:Class="ParametersForWPF.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Window1.xaml"
    Startup="Application_Startup">
    <Application.Resources>
    </Application.Resources>
</Application>

Тогда функция Application_Startup будет автоматически добавлена ​​в ваш App.xaml.cs файл:

public partial class App : Application
{
    private void Application_Startup(object sender, StartupEventArgs e)
    {

    }
}

Теперь внутри этой функции вы можете проверить отправленные argsк заявке.Вот пример для этого:

private void Application_Startup(object sender, StartupEventArgs e)
{
    foreach(string s in e.Args)
    {
        MessageBox.Show(s);
    }
}

Если они вам нужны как Dictionary, вы можете легко реализовать ответ ChrisF внутри функции Application_Startup.

...