【发布时间】: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 事件处理程序上终止了应用程序。
-
我也有同样的问题,你解决了吗?