目前我正在開發 WPF-App。它應該通過帶有單個引數的命令列啟動。我定義:
public App([Optional] string[] args)
{
//string[] args = new string[] { "UK356715586" };
Console.WriteLine("accessed app");
if (args.Length == 0)
{
Environment.Exit(-1);
}
else
{
Console.WriteLine("Before PONumber Setting");
PONumber = args[0].ToString();
}
//PONumber = "UK356715586";
}
我為給定的引數設定了這個除錯設定:

通過在 VS 中啟動,我得到:
一個物件的實體。”
“引數”戰爭“空”。
我能做什么?
uj5u.com熱心網友回復:
不要創建引數宣告為 的建構式[Optional]。它永遠不會被分配。如果洗掉該屬性,您甚至會收到編譯錯誤。
而是使用Startup該Application型別的內置事件。從檔案:
典型的 Windows Presentation Foundation 應用程式在啟動時可能會執行各種初始化任務,包括:
- 處理命令列引數。
[...] 應用程式范圍的屬性和命令列引數只能以編程方式使用。可以通過處理
Startup事件來執行編程初始化[...]
在 中分配事件處理程式App.xaml并在 中實作它App.xaml.cs。
<Application x:Class="YourWpfApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
Startup="App_OnStartup">
<Application.Resources>
<!-- ...your resources. -->
</Application.Resources>
</Application>
public partial class App : Application
{
private void App_OnStartup(object sender, StartupEventArgs e)
{
Console.WriteLine("accessed app");
if (e.Args.Length == 0)
{
Shutdown(-1);
}
else
{
Console.WriteLine("Before PONumber Setting");
PONumber = e.Args[0];
}
}
// ...other code.
}
另一種方法是覆寫OnStartup您的App型別中的方法。從檔案:
OnStartup引發Startup事件。派生自的型別
Application可能會覆寫OnStartup.OnStartup如果Startup需要引發事件,則必須在基類中呼叫被覆寫的方法。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Console.WriteLine("accessed app");
if (e.Args.Length == 0)
{
Shutdown(-1);
}
else
{
Console.WriteLine("Before PONumber Setting");
PONumber = e.Args[0];
}
}
// ...other code.
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315363.html
