【问题标题】:wpf console application not returning to promptwpf控制台应用程序未返回提示
【发布时间】:2011-11-12 06:25:50
【问题描述】:

我有一个带有以下应用程序类的 wpf“控制台”应用程序:

public partial class App : Application
{
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool AttachConsole(uint dwProcessId);

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool FreeConsole();

    const uint ATTACH_PARENT_PROCESS = 0x0ffffffff;

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);

        AttachConsole(ATTACH_PARENT_PROCESS);

        Console.WriteLine("test1");

        FreeConsole();

        System.Environment.Exit(0);
    }
}

当我从控制台启动它时,会出现文本“test1”,但随后控制台光标会闪烁,并且在我按 Enter 之前不会出现提示。我确实删除了 StartupURI 语句。 如何强制应用程序表现得像控制台应用程序并在执行后返回提示? (Windows 7 32 位)。

【问题讨论】:

  • 将 WPF 库添加到程序不会使程序成为 WPF 应用程序,就像添加 DirectX 库会使您的程序成为 DirectX 应用程序一样。如果您需要控制台应用程序,请从控制台模板开始。添加 Windows 模板只会与您的目标相冲突,并且会浪费很多人的时间来帮助您。
  • 应用程序应该在 GUI 和 GUI-less/命令行模式下工作。
  • 在这种情况下,我仍然会从命令行应用程序模板开始,然后仅在需要时构造 WPF Application/Bootloader 对象。您的应用程序启动代码应该驻留在静态 Main 方法中。正如您所拥有的那样,您依赖于默认的 WPF 启动代码,但随后在 OnStartup 事件处理程序上终止了应用程序。
  • 我也有同样的问题,你解决了吗?

标签: wpf console-application


【解决方案1】:

不要将其设置为 Windows 应用程序输出,而是使用控制台应用程序输出类型。唯一的缺点是在 Windows 应用程序运行时控制台将保持打开状态。我想既然你可以得到控制台的 processId,你也许可以在启动后杀死它。

【讨论】:

  • 你实际测试过吗?它不能解决我提到的问题。如果我使用控制台应用程序作为输出类型,当我运行应用程序时控制台会弹出 - 我不希望这样......
  • 应用程序的输出类型与程序结构无关。目前,您正在使用 App.OnStartup() 事件方法来运行您的应用程序。通过使用 App 类,您可以将启动控制权交给 WPF/Windows。该程序的入口点对您隐藏。但是,如果您将应用程序更改为从 Main 方法启动,则可以在您希望程序在控制台模式下运行时绕过 WPF 启动。我会在几分钟内为你写一个小型的创业课程作为例子。
  • 正是我所做的 - 但是当我从提示符启动它时,它不会像“控制台应用程序”那样返回到提示符。它会显示文本“test1”并闪烁光标,直到我按下回车键。
猜你喜欢
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2018-11-02
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多