2012-10-23 85 views
1

我有一個控制檯應用程序,它提示我想通過System.Diagnostics.Process.Start()方法從C#從Windows窗體調用各種信息應用程序,但我不能完全正確地工作。舉一個簡單的例子可以說我想通過一個Windows窗體應用程序捕獲名字和姓氏,然後將每個動態傳遞給控制檯應用程序是這樣的:如何讀寫C#中的進程輸入/輸出

  1. 窗體應用程序啓動,在值的用戶密鑰的名字和姓氏和點擊一個按鈕提交
  2. 它調用的Process.Start的控制檯應用程序
  3. 控制檯應用程序寫出「輸入你的名字」
  4. 窗體應用程序讀取此提示,標識,它需要與姓迴應它收集的值並將其寫入控制檯應用程序的輸出
  5. 控制檯應用程序接受輸入並用下一個提示「輸入姓氏」進行響應
  6. 表單應用程序讀取此提示,確定需要用收集的姓氏值進行響應並將其寫入控制檯應用程序的輸出
  7. 控制檯應用程序現在擁有所有需要,並繼續得意揚揚地

感謝任何見解的信息,這是不是我有很多工作都

+0

那麼問題是什麼?噢,你是否有*要在那個莊園裏完成它,或者是否有可能重新設計這一點? – Servy

+1

爲什麼不在開始時將參數傳遞給控制檯應用程序,除非您有充足的理由這樣做。 – swiftgp

+1

@swiftgp如果您有選擇,根本不應該調用控制檯應用程序,則控制檯應用程序和表單應用程序都應該是兩個不同的UI前端以用於類庫中的功能。當然,如果可執行文件是第三方應用程序而不是他自己的應用程序,那麼我們的想法可能會被拍攝。 – Servy

回答

0

從WinForms應用程序的區域,你可以使用Process.StandardO返回的StreamReader從控制檯應用程序讀取輸出utput屬性,並使用Process.StandardInput屬性返回的StreamWriter將輸入寫入控制檯應用程序。

順便說一句,你是否自己開發控制檯應用程序(或有項目文件)?如果是這樣,我會建議使用更好的IPC形式,例如使控制檯應用程序成爲EXE的DLL intead,或者使用WCF或類似的東西。

0

請看Process.StandardOutputProcess.StandardInputProcess.StandardError。您需要閱讀Process.StandardOutput。當你讀「「輸入你的名字‘’那你寫的第一個名字Process.StandardInput等。

注意,子進程能寫入StandardError以及你可能需要從它在不同的閱讀線程,這樣就可以從兩個

同時讀取在Javaexpect4j,使這個容易。我敢肯定,我看見一些.NET的,但,但我沒能馬上找到它。

編輯:Creating a Child Process with Redirected Input and Output似乎是MSDN上關於此主題的一篇好文章

+0

是啊我已經看了StandardInput和StandardOutput屬性,並試圖讓它與一些在線發佈的測試代碼一起工作。問題是,當我在進程中調用Start時,它只會被啓動並且不會等待輸入...因此,當它將成功讀取提示時,控制檯應用程序似乎不會等待輸入 – snappymcsnap

+0

不太可能,如果它在命令行上執行時等待輸入,那麼它應該在從另一個進程啓動時執行相同的操作。首先使用控制(表單)流程和子流程的較小樣本。 –