2012-02-18 30 views
31

我正在尋找一種方法,可以將命令行參數解析到我的WPF應用程序中,只需讀取用戶傳遞的參數的值即可。WPF命令行參數,一個聰明的方法?

舉個例子

application.exe /setTime 5 

有沒有辦法,我有一些代碼,我只能說:

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

將輸出5

工作液

How to create smart WPF Command Line Arguments

+2

相關[WPF命令行](http://stackoverflow.com/questions/426421/wpf-command-line) – Vache 2012-02-18 17:28:28

+1

你有沒有試過看codeplex?命令行解析有很多不同的實現。 – 2012-02-18 17:30:28

+0

有很多庫可以處理命令行參數,請參閱:http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in-c – 2012-02-19 01:51:37

回答

76

當您解析命令行時,將參數/值對以參數作爲鍵放入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]); 
} 

此循環中的兩個步驟可以定義每個參數是一對值:所述標識符和實際價值本身,例如

my.exe -arg1 value1 -arg2 value2 

然後,你可以簡單地看,如果被看到指定的參數,如果該鍵-arg1在字典中,然後讀取它的值:

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

這意味着你可以有參數以任意順序並省略任何你不想指定的參數。

+0

工作,很簡單比我想象的要多。非常感謝 – 2012-02-18 17:53:38

+3

如果參數數量不均勻,該怎麼辦?爲了避免使用異常(int index = 1; index 2013-01-09 19:50:31

+0

@JPollack - 如果參數數量不平衡,則缺少某些參數,因此您必須報告錯誤。 – ChrisF 2013-01-09 22:56:54