Chr*_*ris 5 c# wpf command-line
我有一个 WPF 应用程序,当传递命令行参数时,它作为命令行应用程序运行。为了显示/获取命令行窗口,我使用以下代码。
当我运行该应用程序时,一切都按预期进行。如果我在应用程序期间向控制台写入任何内容,那么应用程序不会自动从控制台退出,我必须按“输入”或基本上调用某种ReadLine- 请注意,我根本没有ReadLine在我的应用程序中使用。事实上,我只需使用这个简单的代码就可以使这种行为发生。如何防止应用程序运行后要求“按 Enter”?
public static void Main(string[] args)
{
if (args.Length == 0)
{
App app = new App();
app.Run(new MainWindow());
}
else
{
// attach to an parent process console
if (!NativeMethods.AttachConsole(-1))
{
// allocate a new console
NativeMethods.AllocConsole();
}
Console.WriteLine("hey");
NativeMethods.FreeConsole();
}
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法进行分配/附加/释放。请注意,根据罗希特的建议,我FreeConsole在之后直接尝试过WriteLine,但仍然没有帮助
[DllImport("kernel32.dll")]
private static extern bool AllocConsole();
[DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern int FreeConsole();
Run Code Online (Sandbox Code Playgroud)
模式主窗口完成后,使用类似于以下的代码清理所有应用程序资源:
[STAThread()]
internal static void Main()
{
// [Your startup code here]
Application app = new Application();
app.DispatcherUnhandledException += DispatcherUnhandledException;
app.MainWindow = new MainWindow();
app.MainWindow.ShowDialog();
Console.WriteLine("Terminating...");
Startup.FreeConsole();
// http://msdn.microsoft.com/en-us/library/ms597014(v=vs.110).aspx
app.Shutdown(0); // <-- or Application.Current.Shutdown(0);
// http://msdn.microsoft.com/en-us/library/system.environment.exit.aspx
Environment.Exit(0); // <-- a bit redundant however
}
Run Code Online (Sandbox Code Playgroud)