C# StandardOutput重新導向 問題

來源:互聯網
上載者:User

  轉自:http://bbs.csdn.net/topics/190051920#new_post     

this.process = new Process();
        this.process.StartInfo.CreateNoWindow = true;
        this.process.StartInfo.UseShellExecute = false;
        this.process.StartInfo.FileName = fileName;
        this.process.StartInfo.RedirectStandardError = false;
        this.process.StartInfo.RedirectStandardInput = true;
        this.process.StartInfo.RedirectStandardOutput = true; 
        this.process.Start(); 
        StreamWriter sw = this.process.StandardInput;
        sw.Write(test);
        sw.Close();
        string output = this.process.StandardOutput.ReadToEnd();
        this.process.WaitForExit();
        this.process.Close();
中間的 test、fileName 等變數是我先前定義好的
現在有個問題是:
當我的輸出在1000行的時候是完全正常的
但當輸出的行為2000或以上時就阻塞了

也就是當輸入過多時
string output = this.process.StandardOutput.ReadToEnd();
程式就會在上面一行阻塞

請大家忙幫
給一個解決方案
不勝感激

補充一下
是輸出過多時

就是我知道輸出會比較多時(一般是1000行以上)
就會阻塞

我也想過可能是輸入太多
我把
        this.process.StartInfo.RedirectStandardOutput = true; 
該成
        this.process.StartInfo.RedirectStandardOutput = false;

無論輸入多少測試資料
程式都正常

是不是StandardOutput有大小限制
如果解決
謝謝 

這些我都明白
我說了在資料少的時候運行是正常的
不是完全沒有運行

現在還發現一個問題
如果輸入超過好幾千行
也會出現阻塞

謝謝阿
(再次說下,我已經成功運行了,就是資料輸入或輸出過多時出現了問題,期待。。。。。。)

 

緩衝區確實是有大小限制的.而且如果緩衝區滿了的話,系統會阻塞等待緩衝區排出適當的資料.
解決辦法就是在緩衝區還沒有滿之前,將緩衝區中的資料輸出到某個地方.
另外,一個workaround的方法就是通過重新導向符號(>, >>這樣的符號,通過調用批次檔來替代.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.