This article has been localized into Spanish by the community.
Argumentos de línea de comandos en WPF
Los argumentos de línea de comandos son una técnica que le permite enviar a la aplicación, durante su proceso de inicio, un conjunto de parámetros para influir de algún modo sobre su ejecución. El ejemplo más común consiste en iniciar una aplicación cargando automáticamente un archivo específico de una unidad de disco; por ejemplo, en un programa editor. Puede comprobar esto usted mismo con la aplicación Bloc de Notas incluida en Windows, ejecutando (seleccione Ejecutar en el menú de Inicio o pulse la combinación [TeclaWindows-R]):
notepad.exe c:\Windows\win.ini
Este comando iniciará el programa Bloc de Notas con el archivo win.ini abierto (puede que necesite ajustar la ruta del archivo en su sistema). El Bloc de Notas simplemente examina los argumentos suministrados en la línea de comandos y su aplicación puede hacer lo mismo!
Los argumentos de línea de comandos son enviados a su aplicación WPF a través del evento Startup, al que vimos cómo suscribirse en el artículo sobre el archivo App.xaml. Haremos lo mismo en este ejemplo, y después usaremos el argumento suministrado a través de los parámetros del evento. Primero, el archivo App.xaml:
<Application x:Class="WpfTutorialSamples.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
<Application.Resources></Application.Resources>
</Application>
Lo que hacemos aquí es suscribirnos al evento Startup, reemplazando la propiedad StartupUri. El cuerpo del evento es implementado en App.xaml.cs:
using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTutorialSamples
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
MainWindow wnd = new MainWindow();
if(e.Args.Length == 1)
MessageBox.Show("Now opening file: \n\n" + e.Args[0]);
wnd.Show();
}
}
}
Lo que usamos aquí es la estructura StartupEventArgs, enviada al evento Startup de la aplicación con el nombre de parámetro e. Este objeto contiene la propiedad Args, una matriz de cadenas de texto reflejando los diferentes argumentos de la línea de comandos, separados por espacios en blanco excepto en aquellos argumentos delimitados por comillas dobles.
Comprobar el argumento de línea de comandos
Si ejecuta el ejemplo anterior, no ocurrirá nada ya que no se ha especificado ningún argumento en la línea de comandos. Afortunadamente, Visual Studio facilita la depuración de aplicaciones con argumentos de línea de comandos. Desde el menú Proyecto, seleccione la opción "Propiedades de [nombre del proyecto]" y vaya a la pestaña Depuración, donde puede definir uno o más argumentos. Debería tener un aspecto similar a este:
Pruebe a ejecutar la aplicación y la verá responder al parámetro especificado.
Por supuesto, el mensaje no es extremadamente útil. En lugar de mostrarlo, quizá prefiera enviar el parámetro al constructor de su ventana inicial, o ejecutar una función de apertura con él, tal y como se sugiere a continuación:
using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTutorialSamples
{
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
MainWindow wnd = new MainWindow();
// The OpenFile() method is just an example of what you could do with the
// parameter. The method should be declared on your MainWindow class, where
// you could use a range of methods to process the passed file path
if(e.Args.Length == 1)
wnd.OpenFile(e.Args[0]);
wnd.Show();
}
}
}
Posibilidades de la línea de comandos
En este ejemplo, comprobamos a ver si hay exactamente un argumento y, si es así, lo utilizamos como un nombre de archivo. En un ejemplo más realista, usted podría recabar múltiples argumentos y usarlos como opciones de inicio; por ejemplo, encender o apagar alguna funcionalidad. Podría hacer eso mismo iterando en un bucle por toda la lista de argumentos suministrados, pero aquello está más allá del alcance de este artículo.