2014-03-13 41 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

相關問題