【问题标题】:How to block console from returning with WPF application attached to console while App is still running如何在应用程序仍在运行时阻止控制台返回附加到控制台的 WPF 应用程序
【发布时间】:2018-11-02 21:41:30
【问题描述】:

我在 WPF 入口点有以下代码

public partial class App : Application
{
    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;

    protected override void OnStartup(StartupEventArgs e)
    {
        if (e.Args.Length == 0)
        {
            // Launch GUI and pass arguments in case you want to use them.
            base.OnStartup(e);
            new MainWindow().ShowDialog();
        }
        else
        {
            //Do command line stuff
            if (e.Args.Contains("-i"))
            {
                // redirect console output to parent process;
                // must be before any calls to Console.WriteLine()
                AttachConsole(ATTACH_PARENT_PROCESS);
                var stopWatch = new Stopwatch();
                stopWatch.Reset();
                stopWatch.Start();

                for (int i = 0; i < 100; i++)
                {
                    Console.WriteLine(i);
                }
                stopWatch.Stop();
                var ts = stopWatch.Elapsed;
                var elapsedTime = $"{ts.Hours:00}:{ts.Minutes:00}:{ts.Seconds:00}.{ts.Milliseconds / 10:00}";
                Console.WriteLine("RunTime " + elapsedTime);               
            }
            else
            {
                AttachConsole(ATTACH_PARENT_PROCESS);
                Console.WriteLine("Incorrect arguments");
            }
        }

        Shutdown();
    }
}

提示立即返回,就像我的应用在后台运行一样。

我希望该应用程序会阻止控制台返回,直到该过程完成。

【问题讨论】:

  • 又是什么问题?
  • 很公平,添加了更多信息。 :-)
  • 从您发布的代码中,我看不到应用程序将如何“在后台运行”。如果有命令行参数,它会运行for 循环然后Shutdown(),它不会启动主窗口。

标签: c# wpf console-application


【解决方案1】:

AttachConsole 重新使用现有的控制台使用 AllocConsole() 代替。这将阻塞控制台,除非父进程正在运行,并且会在程序完成执行后立即关闭控制台。

[DllImport("kernel32.dll")]
static extern bool AllocConsole();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2011-01-22
    • 2013-02-11
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多