0

私はクロージャ コンパイラのラッパー クラスを作成していますが、process.StandardOutput.ReadToEnd()次のコードを作成すると、空の文字列が取得されます。

  public class ClosureCompiler
    {
        ProcessStartInfo psi = new ProcessStartInfo();
        string _commandpath;
        public ClosureCompiler(string commandpath)
        {
            _commandpath = commandpath;

            psi.FileName = "java.exe"; 

            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = true;
        }

        public string Compile(string sourcefile)
        {
            psi.Arguments = " -jar " + _commandpath + " --js " + sourcefile; // +" --js_output_file " + destinationfile + "";

            var process = Process.Start(psi);

            process.WaitForExit();
            return process.StandardOutput.ReadToEnd();
        }
    }

しかし、標準出力に表示されるコマンドライン出力からコマンドを実行しているとき。

4

1 に答える 1

0

行の順序を変更しますprocess.WaitForExit(); およびprocess.StandardOutput.ReadToEnd(); WaitForExitが完了すると、process.StandardOutputはすでに「デッド」になっています。

コード(コンパイルメソッド)は次のようになります。

var process = Process.Start(psi);
string stdOutput = process.StandardOutput.ReadToEnd();
process.WaitForExit();
return stdOutput;

Process.OutputDataReceivedイベントを使用して出力データを受信するデリゲートを登録することもできます

于 2013-03-06T08:40:22.840 に答える