1

Windows フォーム アプリから System.Diagnostics.Process.Start() メソッドを介して C# から呼び出したいさまざまな情報を要求するコンソール アプリがありますが、正しく動作させることができません。簡単な例として、Windows フォーム アプリケーションを介して FirstName と LastName をキャプチャし、それぞれを次のように動的にコンソール アプリに渡したいとします。

  1. フォーム アプリが起動し、ユーザーが姓と名の値を入力し、ボタンをクリックして送信します。
  2. コンソール アプリの Process.Start を呼び出します。
  3. コンソール アプリに「名前を入力してください」と表示される
  4. フォーム アプリはこのプロンプトを読み取り、収集した FirstName 値で応答する必要があることを識別し、それをコンソール アプリの出力に書き込みます。
  5. コンソール アプリは入力を受け入れ、次のプロンプト「姓を入力してください」で応答します。
  6. フォーム アプリはこのプロンプトを読み取り、収集した LastName 値で応答する必要があることを識別し、それをコンソール アプリの出力に書き込みます。
  7. コンソール アプリには、必要なすべての情報が含まれるようになり、引き続き順調に進んでいます。

洞察に感謝します。これは私があまり取り組んだ領域ではありません

4

2 に答える 2

0

WinForms アプリから、Process.StandardOutput プロパティによって返される StreamReader を使用してコンソール アプリから出力を読み取り、Process.StandardInput プロパティによって返される StreamWriter を使用してコンソール アプリに入力を書き込むことができます。

ところで、コンソール アプリを自分で開発しましたか (またはプロジェクト ファイルを持っていますか)。もしそうなら、コンソールアプリをEXEではなくDLLにするか、WCFなどから何かを使用するなど、より良い形式のIPCを使用することをお勧めします。

于 2012-10-23T20:45:40.733 に答える
0

Process.StandardOutputProcess.StandardInputと を見てくださいProcess.StandardError

から読む必要がありますProcess.StandardOutput。「「Enter your first name」」と読むときは、ファーストネームを に書きますProcess.StandardInput

子プロセスStandardErrorも同様に書き込むことができ、両方から同時に読み取ることができるように、おそらく別のスレッドで読み取る必要があることに注意してください

これを簡単にするものがJavaあります。expect4j.net で何かを見たと確信していますが、今は見つけることができません。

編集:リダイレクトされた入力と出力を持つ子プロセスの作成は、 MSDN のこのトピックに関する良い記事のようです

于 2012-10-23T20:46:06.457 に答える