2014-03-13 45 views
2

通常情况下,调用命令提示符窗口的应用程序不会等待其退出。一旦我输入myFormApp.exe并按下回车键,将会显示一个表格,命令提示符立即移动到下一行。启动一个C#Windows应用程序,然后等待命令行退出

C:\> myFormApp.exe 
C:\>  # this line will display immediately 

我知道使用cmd /c将等待应用程序退出。

C:\> cmd /c myFormApp.exe 
C:\>  # this line will display after myFormApp.exe closed 

但我想等待,即使在缺少cmd /c

有什么办法来防止命令提示符移动到新的生产线,具有编辑myFormApp.exe源代码?

添加AllocConsole到Windows应用程序将显示控制台,但它不会让命令提示符等待退出。

if (args.Length > 0) 
{ 
    // Command line given, display console 
    AllocConsole(); 
} 
else 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

任何建议将受到赞赏。谢谢!

回答

1

你可以写一个包装您的WinForms应用程序一个简单的控制台应用程序。您既可以启动控制台应用程序中的过程:

static void Main(string[] args) 
{ 
    Console.WriteLine("Hello!"); 

    var process = new Process() { StartInfo = new ProcessStartInfo { FileName = @"WindowsFormsApplication1.exe" } }; 
    process.Start(); 
    process.WaitForExit(); 

    Console.WriteLine("bye bye!"); 
} 

或者你可以到你的WinForms应用程序添加引用和实例化控制台应用程序内的WinForms类:

static void Main(string[] args) 
{ 
    Console.WriteLine("Hello!"); 

    var mainForm = new WindowsFormsApplication1.Form1(); 
    mainForm.ShowDialog(); 

    Console.WriteLine("bye bye!"); 
} 
+1

当执行由包装控制台应用程序双击,会显示命令提示符。这是不希望的行为。有什么办法可以避免它? – PandaDrunkard

+0

不,不是真的。您可以将包装器应用程序的输出类型更改为Windows应用程序,这会使窗口不出现,但如果从控制台启动它,则不会等待执行完成。不太确定你想在这里实现什么,可能是为了解决错误的问题。阻止提示移动到新行不能解决任何问题。用户可以随时打开新的提示并执行任何操作。 – Bartosz

+0

您可以使用互操作来隐藏和显示控制台窗口。在启动时隐藏它,在退出时显示。这样,如果您在Windows中双击您的应用程序,则不会显示任何控制台,如果您从现有控制台启动该控制台,它将隐藏WinForms应用程序执行时间,但在退出时再次显示。 http://stackoverflow.com/questions/3571627/show-hide-the-console-window-of-a-c-sharp-console-application 我wound't劝这样做,虽然。 – Bartosz

相关问题