WPF 명령줄 인수, 스마트한 방법?
사용자가 전달한 인수 값을 읽는 방법만으로 명령줄 인수를 WPF 응용 프로그램에 해석할 수 있는 방법을 찾고 있습니다.
예로서
application.exe /setTime 5
이렇게 말할 수 있는 코드가 있을까요?
MessageBox.Show(arg("setTime"));
어떤 것이 출력됩니까?5
현용 솔루션
이 방법은 항상 인수를 "이름"/"값" 쌍으로 지정하는 것입니다.
myprogram.exe -arg1 value1 -arg2 value2
즉, 명령줄을 해석할 때 인수/값 페어를 다음 명령어에 넣을 수 있습니다.Dictionary
인수를 키로 합니다.그럼 당신의arg("SetTime")
다음과 같이 됩니다.
MessageBox.Show(dictionary["SetTime"]);
(실제 사전이 공개되는 것을 원하지 않는 것이 분명합니다.)
처음에 인수를 가져오려면 다음을 사용합니다.
string[] args = Environment.GetCommandLineArgs();
그러면 모든 인수가 반환되므로 2단계에서 배열을 해석해야 합니다(먼저 길이가 2+1의 배수인지 확인한 후).
어레이의 첫 번째 요소는 실행 중인 프로그램 이름 MS Learn입니다.따라서 루프는 다음 중 하나부터 시작해야 합니다.
for (int index = 1; index < args.Length; index += 2)
{
dictionary.Add(args[index], args[index+1]);
}
각 인수를 정의할 때 이 루프는 ID와 실제 값 자체의 쌍으로, 예를 들어 다음과 같습니다.
my.exe -arg1 value1 -arg2 value2
그러면 단순히 인수가 지정되어 있는지 여부를 확인할 수 있습니다.-arg1
사전에 있는 값을 읽습니다.
string value;
if (dictionary.TryGetValue(arg, out value))
{
// Do what ever with the value
}
즉, 임의의 순서로 인수를 지정할 수 있으며 지정하지 않을 인수를 생략할 수 있습니다.
이 방법의 유일한 단점은 다음과 같은 플래그가 있는 경우입니다.-debug
(예를 들어) 플래그의 유무에 따라 논리적으로 구현될 수 있는 것은 다음과 같이 지정해야 합니다.-debug true
(또는1
또는on
값을 필요로 하는 플래그(설정 파일 경로, 데이터베이스 연결 문자열 등)가 있으면 작업이 간소화됩니다.
WPF에는 다른 방법이 있습니다.다음은 이에 대한 기사이며, 취해야 할 단계입니다.
먼저, 당신이 엽니다.App.xaml
그리고 당신이 덧붙인다Startup="Application_Startup"
그 후StartupUri="Window1.xaml"
, 그래서 당신의App.xaml
다음과 같이 됩니다.
<Application x:Class="ParametersForWPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml"
Startup="Application_Startup">
<Application.Resources>
</Application.Resources>
</Application>
그 후 기능합니다.Application_Startup
에 자동으로 추가됩니다.App.xaml.cs
파일:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
}
}
이제 이 기능 안에서args
어플리케이션에 송신됩니다.이를 위한 예는 다음과 같습니다.
private void Application_Startup(object sender, StartupEventArgs e)
{
foreach(string s in e.Args)
{
MessageBox.Show(s);
}
}
필요한 경우Dictionary
ChrisF의 답변을 쉽게 구현할 수 있습니다.Application_Startup
★★★★★★ 。
예를 들어, 이것이 내가 두 가지 유형의 논쟁을 처리하는 방법이다.
myapp.exe -my-flag -another-flag -value-flag "Hello World"
Dictionary<string, string> arguments = new Dictionary<string, string>()
//e from StartupEventArgs e
for (int index = 0; index < e.Args.Length; index += 2)
{
if(e.Args.Length == index+1 || e.Args[index + 1].StartsWith("-"))
{
arguments.Add(e.Args[index], string.Empty);
index--;
}
if (e.Args.Length >= index + 1 && !e.Args[index + 1].StartsWith("-"))
arguments.Add(e.Args[index], e.Args[index + 1]);
}
이렇게 해서 값을 확인할 수 있습니다.
if(arguments.ContainsKey("my-flag")){
arguments.TryGetValue("value-flag", valueFlag)
}
언급URL : https://stackoverflow.com/questions/9343381/wpf-command-line-arguments-a-smart-way
'programing' 카테고리의 다른 글
UIView 서브클래스를 위한 적절한 프랙티스 (0) | 2023.04.21 |
---|---|
변수와 함께 Bash를 사용하여 여러 줄 문자열을 쓰는 방법은 무엇입니까? (0) | 2023.04.21 |
행과 열 번호가 지정된 셀의 내용을 가져옵니다. (0) | 2023.04.21 |
EXECUTE 권한이 사용자 정의 테이블 유형에 대해 거부되었습니까? (0) | 2023.04.21 |
목록에서 요소를 제거하려면 어떻게 해야 합니까? (0) | 2023.04.16 |