如何基于参数启动WPF

y3bcpkx1  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(195)

我目前正在开发一个进行一些文件操作的应用程序,我希望能够通过控制台或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应用程序创建的那样),要么需要一个UI来访问Helper类,这取决于传入的参数。

0dxa2lsx

0dxa2lsx1#

Application类中有一个事件“StartUp”,你可以使用它。它提供你通过命令提示符提供的参数。下面是MSDN的一个例子:

应用程序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">
</Application>

应用程序.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();
    }
}

我希望这会有帮助。

of1yzvn4

of1yzvn42#

有两个选项可用于获取命令行参数
1)如果你想读取参数OnStartup。这对于args的全局访问是很好的。
覆写App.xaml.cs中的OnStartup,并查看StartupEventArgs类别的Args属性。

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

这可以从应用程序中的任何地方使用,如从表单/页面。

ux6nzvsh

ux6nzvsh3#

我更喜欢覆盖OnStartup,因为启动事件通常注册在“App.xaml”中,我有时不想修改它。而且OnStartup函数可以提供一种方法,在启动事件被调用之前做一些预处理。这就是为什么我们可以覆盖OnStartup!

相关问题