TOC

This article is currently in the process of being translated into Bulgarian (~98% done).

WPF приложение :

Command-line параметри в WPF

Параметрите на командния ред са техника, при която можете да предадете набор от параметри на приложение, което искате да стартирате, за да му повлияете по някакъв начин. Най-често срещаният пример е да накарате приложението да се отвори с определен файл, напр. в редактор. Можете да опитате това сами с вграденото приложение Notepad на Windows, като стартирате (изберете Run от менюто Start или натиснете [WindowsKey-R]):

notepad.exe c:\Windows\win.ini

Това ще отвори Notepad с файла win.ini (може да се наложи да коригирате пътя, за да съответства на вашата система). Notepad просто търси един или няколко параметъра, които след това използва. Вашето приложение може да прави същото!

Параметрите на командния ред се предават на вашето WPF приложение чрез събитието Startup, за което се абонирахме в статията App.xaml. Ще направим същото в този пример и след това ще използваме стойността, подадена като аргументи на метода. Първо, файлът 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>

Всичко, което правим тук, е да се абонираме за събитието Startup, замествайки свойството StartupUri. Така събитието се изпълнява в 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();
		}
	}
}

StartupEventArgs е това което използваме тука. То се подава на събитието Application_Startup, с името e. Има свойството Args, което е масив от string-ове (низ). Параметрите на командния ред са разделени с интервали, освен ако самият интервал не е между кавички (т.е. част от string - низ).

Тестване при използване на параметри на командния ред

Ако изпълните горния пример, нищо няма да се случи, защото не са посочени параметри на командния ред. За щастие, Visual Studio улеснява тестването на това във вашето приложение. От менюто Project изберете "[Име на проекта] properties" и след това отидете в раздела Debug, където можете да дефинирате параметър на командния ред . Трябва да изглежда нещо подобно на долното:

Опитайте да стартирате приложението и ще видите, че то отговаря на вашия параметър.

Разбира се, съобщението не е особено полезно. Вместо това може да искате или да го предадете на конструктора на вашия главен прозорец, или да извикате публичен отворен метод върху него, като ".OpenFile()":

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();
		}
	}
}

Възможности при използване на параметри на командния ред

В този пример тестваме дали има точно един аргумент и ако е така, го използваме като име на файл. В пример от реалния свят можете да съберете няколко аргумента и дори да ги използвате за опции, напр. включване или изключване на определена функционалност. Това е постижимо като преминете през целия списък с подадени аргументи, докато събирете необходимата информация, за да продължите... но това е извън обхвата на тази статия.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!