TOC

This article has been localized into Korean by the community.

WPF application:

WPF에서의 명령줄 파라미터

명령줄 파라미터는 어플리케이션을 실행할 때 약간의 영향을 끼칠 수 있는 파라미터들을 어플리케이션으로 전달하는 기술입니다. 가장 일반적인 예제는 에디터 같은 어플리케이션을 실행할 때 특정 파일로 실행하는 것 입니다. 윈도우즈에 내장된 메모장을 실행해서 직접 확인해볼 수 있습니다(시작 메뉴에서 실행을 선택하거나 [윈도우키-R]을 누르면 됩니다) :

notepad.exe c:\Windows\win.ini

이 명령줄은 win.ini 파일로 메모장을 실행할 것 입니다(본인의 시스템에 따라 경로를 수정해야 할 수도 있습니다). 메모장은 간단하게 1개의 파라미터 또는 다수의 파라미터를 전달받을 수 있으며 당신이 만드는 어플리케이션도 동일합니다!

명령줄 파라미터는 App.xaml 편에서 구독했던 Startup 이벤트를 통해 당신의 WPF 어플리케이션으로 전달됩니다. 동일한 예제를 해보겠습니다. 그리고 전달받은 값을 메소드의 인자로 사용해보겠습니다. 우선 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>

StartupUri 속성을 대체하여 Startup 이벤트를 구독하기만 하면 됩니다. 이벤트는 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를 이용합니다. 어플리케이션의 StartUp 이벤트를 통해서 전달받는 값이며 e로 이름을 지었습니다. e는 문자열 배열인 Args 속성을 가집니다. 명령줄 파라미터는 문자열이 스페이스를 포함하고 있는 경우에 스페이스를 기준으로 구분합니다.

명령줄 파라미터 테스트

위 예제를 실행시키더라도 명령줄 파라미터를 쓰지 않았기 때문에 아무 일도 일어나지 않습니다. 다행히도 Visual Studio는 어플리케이션을 테스트하기가 쉽습니다. Project 메뉴에서 "[Project name] properties"를 선택한 다음 Debug 탭으로 이동합니다. 여기서 명령줄 파라미터를 정의할 수 있습니다. 다음과 같이 생겼습니다 :

어플리케이션을 실행하고 입력한 파라미터에 반응하는지 살펴봅시다.

물론 이 메시지가 대단하게 유용하지는 않습니다. 대신 메인 윈도우의 생성자로 이 메시지를 전달할 수도 있고, public 메소드를 호출 할 수도 있습니다. 다음을 보겠습니다 :

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!