【问题标题】:WPF application + command line argumentsWPF 应用程序 + 命令行参数
【发布时间】:2015-03-04 22:18:51
【问题描述】:

我正在尝试为我的 WPF 应用程序处理命令行参数,为此我做了以下更改

我已将输出类型转换为 - 控制台应用程序

注释了 App.xaml 中的 StartupUri 参数

并覆盖 受保护的覆盖无效 OnStartup(StartupEventArgs e) { }

这是我重写的方法

public partial class App : Application
{
    [DllImport("Kernel32.dll")]
    public static extern bool AttachConsole(int processId);

    [DllImport("Kernel32.dll")]
    public static extern bool FreeConsole();

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        if (e.Args != null && e.Args.Length > 0)
        {
            ExecutionMethod.CommandLine = true;
            ProcessCommandLineArgs.ProcessArgs(e.Args);
            base.Shutdown();
        }
        else
        {
            FreeConsole();
            ExecutionMethod.CommandLine = false;
            TestApp WindowToDisplay = new TestApp();
            WindowToDisplay.Show();
        }
    }
}

我能够处理参数并在控制台上显示结果。

但问题是

这个 TestApp 创建进程,比如 P1 ,它执行一些命令,结果被重定向到控制台输出。 在 P1 完成之前,由于上述重写方法中的 base.Shutdown() 导致主进程退出。

如何让这个 base.shutdown 等待进程 P1 完成。

任何链接/建议

问候

【问题讨论】:

标签: wpf command-line


【解决方案1】:

我实际上是在等待新进程 P1 退出。

我同步了主进程和进程P1。 仅在进程 P1 退出时将 ProceedForShutdwon 设为 true

while (ExecutionMethod.ProceedForShutDown == false)
{
       mut.WaitOne(500); // wait for 500 ms
}
base.Shutdown();

我能够实现我的目标。

希望这对其他人也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2018-11-16
    • 1970-01-01
    • 2021-07-16
    • 2013-11-26
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多