我正在寻找一种方法,我可以将命令行参数解析到我的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 + 1的倍数之后):
数组的第一个元素是执行程序的名称 - MSDN Page - 所以你的循环需要从一个开始:
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中还有另一种方法可以做到这一点。这是关于它的article,以下是采取的步骤:
首先,你打开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's answer函数内实现Application_Startup
。