ユーザーが渡した引数の値を読み取るだけで、コマンドライン引数をWPFアプリケーションに解析できる方法を探しています。
例として
application.exe /setTime 5
私が言うことができるコードを持っている方法があります:
MessageBox.Show(arg("setTime"));
5
を出力します
解決策
私がいつもやる方法は、引数を「名前」/「値」のペアとして指定することです。
_myprogram.exe -arg1 value1 -arg2 value2
_
これは、コマンドラインを解析するときに、引数をキーとしてDictionary
に引数/値のペアを配置できることを意味します。すると、arg("SetTime")
は次のようになります。
_MessageBox.Show(dictionary["SetTime"]);
_
(明らかに、実際の辞書を公開したくありません。)
最初に引数を取得するには、次を使用できます。
_string[] args = Environment.GetCommandLineArgs();
_
これはすべての引数を返すので、2つのステップで配列を解析する必要があります(最初に長さが2 + 1の倍数であることを確認した後):
配列の最初の要素は実行中のプログラムの名前です。 MSDNページ -したがって、ループは1つから開始する必要があります。
_for (int index = 1; index < args.Length; index += 2)
{
dictionary.Add(args[index], args[index+1]);
}
_
これは、各引数が値のペアであるように2つのステップでループします。識別子と実際の値自体です。
_my.exe -arg1 value1 -arg2 value2
_
次に、キー_-arg1
_が辞書にあるかどうかを確認することで、引数が指定されているかどうかを確認し、その値を読み取ります。
_string value;
if (dictionary.TryGetValue(arg, out value))
{
// Do what ever with the value
}
_
これは、任意の順序で引数を指定し、指定したくない引数を省略することができることを意味します。
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
として必要な場合は、Application_Startup
関数内に ChrisFの答え を簡単に実装できます。