我正在开发一个执行某些文件操作的应用程序,我希望能够通过控制台或通过UI进行操作(我选择了WPF)。
我非常想说:(假的)
if ( Environment.GetCommandLineArgs().Length > 0 )
{
//Do not Open WPF UI, Instead do manipulate based
//on the arguments passed in
}
else
{
//Open the WPF UI
}
我已经阅读了几种不同的以编程方式启动WPF窗口/应用程序的方法,如:
Application app = new Application ();
app.Run(new Window1());
但我不完全确定我想将其插入控制台应用程序。
有没有人有关于如何实现这一目标的最佳做法或建议?主要处理功能在我创建的Helper类中。所以基本上我要么想要一个静态启动方法(比如标准的Console Application创建),要么根据传入的参数来访问Helper类。
答案 0 :(得分:102)
在Application类中,有一个事件“StartUp”可以使用它。它为您提供通过命令提示符提供的args。以下是MSDN的示例:
<强>的App.xaml 强>
<Application x:Class="WpfApplication99.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="App_Startup">
的 App.xaml.cs 强>
public partial class App : Application
{
void App_Startup(object sender, StartupEventArgs e)
{
// Application is running
// Process command line args
bool startMinimized = false;
for (int i = 0; i != e.Args.Length; ++i)
{
if (e.Args[i] == "/StartMinimized")
{
startMinimized = true;
}
}
// Create main application window, starting minimized if specified
MainWindow mainWindow = new MainWindow();
if (startMinimized)
{
mainWindow.WindowState = WindowState.Minimized;
}
mainWindow.Show();
}
}
我希望这会有所帮助。
答案 1 :(得分:23)
获取命令行参数有两个选项
1)如果你想阅读参数OnStartup
。这适用于args
的全局访问。
覆盖OnStartup
中的App.xaml.cs
并查看Args
类的StartupEventArgs
属性。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
foreach (string arg in e.Args)
{
// TODO: whatever
}
base.OnStartup(e);
}
}
2)另一种简单的方法是从环境对象中读取参数。
Environment.GetCommandLineArgs();
这可以在应用程序的任何地方使用,例如从Form / Page也可以使用。