把控制台程序嵌入到 WinForm 中执行
我們經常有一些用控制臺實現的簡單應用,這種應用一般都是一步一步“向導”式執行,在每一步上收集用戶的輸入,最后得到程序執行的結果。但有些用戶可能不喜歡用鍵盤操作的命令行界面,還是愿意用鼠標點點按鈕的?Windows?窗體。另外控制臺程序的參數輸入是按順序執行,到了下一步就不能再更改前面的輸入了,而在?Windows?窗體上我們可以等用戶把所有需要的參數都已錄入完成并進行了驗證后,再一次性提交執行。要實現這兩種需求,一個好的辦法就是把控制臺程序“嵌入”到?WinForm?中執行,這樣既能給用戶以良好的使用體驗,又能復用已有的控制臺程序。
所謂“嵌入”執行,是指寫一個?WinForm?程序去調用控制臺程序,并向控制臺程序傳入參數數據,讀取控制臺的輸出。其中的關鍵是重定向控制臺程序的輸入輸出,用到的主要類型為?Process、ProcessStartInfo、StreamWriter。
假設已有控制臺程序?DemoConsole.exe,具體步驟如下:
1.?新建?Windows?應用程序,在?Form?窗體中設置啟動?DemoConsole、接受用戶輸入數據和顯示?DemoConsole?輸出的界面元素,比如按鈕、文本框等。
2.?用?DemoConsole.exe?文件名初始化?ProcessStartInfo,并設置?ProcessStartInfo?對象的相關屬性值,使其不再使用?Windows?外殼程序執行,不顯示窗體,還要重定向標準輸入和輸出。
3.?初始化?Process,設置?Process?對象的?StartInfo?屬性值為步驟?2?中得到的?ProcessStartInfo?對象。處理?Process?對象的?OutputDataReceived?事件,可以獲取并顯示?DemoConsole?的輸出。調用?Process?對象的?Start?方法啟動?DemoConsole?進程。
4.?訪問步驟?3?中得到的?Process?對象的?StandardInput?屬性,可以得到一個?StreamWriter?類型的對象,在調用?Process?對象的?BeginOutputReadLine?方法后,就可以通過?StreamWriter?對象的?WriteLine?方法向?DemoConsole?傳入參數數據,驅動?DemoConsole?執行。
5.?DemoConsole?執行完畢后,把?StreamWriter?和?Process?對象關閉。
我們這里用到的?Process?類型其功能是非常強大的,當然不僅僅可以訪問控制臺程序,實際上它對本地和遠程的各種?Windows?程序都可以控制和監視。但本文重點不在此,就不再贅述了。
示例程序下載
http://files.cnblogs.com/ibmfm/ConsoleRedirect.rar
轉載于:https://www.cnblogs.com/DoNetCShap/archive/2012/06/26/2564478.html
總結
以上是生活随笔為你收集整理的把控制台程序嵌入到 WinForm 中执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载——C语言中float,double
- 下一篇: HTTP状态代码