2012-02-18 33 views
31

Estoy buscando una forma de que pueda analizar los argumentos de la línea de comandos en mi aplicación WPF con solo una forma de leer el valor del argumento que aprobó el usuario.Argumentos de línea de comandos de WPF, una forma inteligente?

Como ejemplo

application.exe /setTime 5 

hay una manera para mí tener algo de código en que sólo puedo decir:

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

qué salida 5

solución de trabajo se

How to create smart WPF Command Line Arguments

+2

Relacionados [WPF Command Line] (http://stackoverflow.com/questions/426421/wpf-command-line) – Vache

+1

¿Has probado codeplex? Hay muchas implementaciones diferentes para el análisis de línea de comando. –

+0

Hay muchas bibliotecas para manejar args de línea de comando, consulte: http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in-c –

Respuesta

76

Cuando analiza la línea de comando, coloque los pares argumento/valor en Dictionary con el argumento como la clave. Luego, su arg("SetTime") se convertirá en:

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

(Obviamente no desea el diccionario real a ser público.)

Para obtener los argumentos en primer lugar que puede utilizar:

string[] args = Environment.GetCommandLineArgs(); 

Esto devolverá todos los argumentos, por lo que deberá analizar la matriz en pasos de dos (después de comprobar primero que la longitud es un múltiplo de dos +1):

The primer elemento del array es el nombre del programa en ejecución - MSDN Page - por lo que el bucle tiene que partir de una:

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

Este bucles en pasos de dos como se define cada argumento es un par de valores: el identificador y el valor real en sí, por ejemplo

my.exe -arg1 value1 -arg2 value2 

A continuación, puede ver si el argumento es especificado por ver si la clave -arg1 está en el diccionario y luego leer su valor:

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

Esto significa que puede tener los argumentos en cualquier orden y omita cualquier argumento que no desee especificar.

+0

Trabajar, fue bastante simple de lo que pensé que era Muchas gracias –

+3

¿Qué ocurre si se dan un número impar de parámetros? Para evitar la excepción, utilice for (int index = 1; index

+0

@JPollack - si tiene una cantidad desigual de argumentos, entonces falta algo así que debe informar un error. – ChrisF

Cuestiones relacionadas