1

アプリケーションによって生成された、実行時間の長い小さなコンソール アプリから、コンソールの標準出力を取得する際に問題があります。

私のアプリはコンソール アプリを起動し、コンソール アプリは、アプリケーションの有効期間中 (または明示的に強制終了されるまで)、ポートをリッスンし続けます。

コンソール アプリが起動すると、リッスンしているポート番号が出力されます。そのポート番号を非同期的に取得し、アプリの他の場所で使用する必要があります。問題は、出力データを取得するためのイベント ハンドラーが呼び出されないことです。些細なことで忘れていることがきっとあるはずです。

  ProcessStartInfo si = new ProcessStartInfo();
  si.FileName = theFileName;
  si.Arguments = theargs;
  si.UseShellExecute = false;
  si.RedirectStandardOutput = true;
  si.CreateNoWindow = true;
  _process = Process.Start(si);
  _process.OutputDataReceived += (sender, args) =>
    {
      //Parse the args.Data string for the port number.
    };
  _process.BeginOutputReadLine(); // My handler never gets called.
  // I don't want to call _process.WaitForExit() here as this is a long running process.
4

1 に答える 1

1

私の特定のケースでは、問題はコンソールアプリが標準出力をフラッシュしていないことが原因でした。

コンソール アプリは python で作成され (その後 py2exe によって Windows で実行可能になりました)、必要な...

sys.stdout.flush()

アプリが終了する前に出力を取得する前に呼び出されます。

于 2011-03-29T04:51:50.523 に答える