0

プログラムを開始して、標準出力を読み取ろうとしています。ただし、イベントが発生することはありません。私が開始したプロセスは実行中であり、同じ引数を使用してコンソールで出力を作成します。私が間違っていることは何ですか?

    public void StartProcess(string Filename, string Arguments)
    {
        currentProcess = new Process();
        currentProcess.StartInfo.FileName = Programm;
        currentProcess.StartInfo.Arguments = Arguments;
        currentProcess.StartInfo.UseShellExecute = false;
        currentProcess.StartInfo.RedirectStandardOutput = true;
        currentProcess.StartInfo.RedirectStandardError = true;
        currentProcess.OutputDataReceived += OutputReceivedEvent;
        currentProcess.EnableRaisingEvents = true;

        string path = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + "_Result.txt";
        LastResult = path;
        resultfile = File.CreateText(path);

        currentProcess.Start();
        currentProcess.BeginOutputReadLine();
        response.command = Command.ACK;
        SendMessage(response);

    }
    private void OutputReceivedEvent(object sender, DataReceivedEventArgs e)
    {
        resultfile.WriteLine(e.Data);
    }

編集: 奇妙なことを発見しました: 私が開始するプロセスは mcast です。ping のような別のことを開始すると、私のコードは問題なく動作します。だからmcastは何か面白いことをしているようだ!

EDIT2:したがって、以下のコードは機能していますが、特定のサイズのブロックのみを読み取ります。ストリームに書き込まれるバイトが少ない場合、イベントは発生せず、.ReadBlock も何も返しません。

EDIT3:もう1つの更新、問題は、mcastが出力ストリームをフラッシュしないことです。私は自分のツールを書くことになりましたが、それはうまく機能しています。

4

1 に答える 1