[問題] BeginOutputReadLine

看板C_Sharp作者 (Ar藤)時間13年前 (2011/02/21 23:03), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
private void backgroundWorker_Build_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.UserState != null) { richTextBox_Output.AppendText(e.UserState.ToString()+"S"); Console.WriteLine(); byte[] byteArray = System.Text.Encoding.Default.GetBytes((e.UserState.ToString())+"HHH"); //byte[] byteArray = System.Text.Encoding.Default.GetBytes(("ABC\nNR\rXYZ") + "HHH"); foreach (byte b in byteArray) { Console.Write(b); Console.Write(" "); Console.WriteLine(); } } } http://codepad.org/fI816guc 上面的code有點亂 我另外貼在這 http://codepad.org/k7VpWynu 整個檔的code 及 外部程式 上面這個function是由一個backgroundWorker回傳進度時執行的 而這個backgroundWorker又會起動一個外部的process 這個外部process 是個c++寫的執行檔 內部很簡單 std::cout<<"abc \n \r xyz"<<std::endl; 只用上面這個印東西 我想問的是這一行 richTextBox_Output.AppendText(e.UserState.ToString()+"S"); 我有印出byte來觀察 很奇怪的是e.UserState.ToString 直接讀的話 原本字串中的\n \r都會被自動去掉 但若加上"S"則都會被換成S 加上什麼就換成什麼 反觀如果我用("ABC\nNR\rXYZ") + "HHH" 這種正常字串 那HHH就只是被加在字尾 請問為什麼會這樣呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.221.195 ※ 編輯: Arton0306 來自: 220.135.221.195 (02/21 23:16) ※ 編輯: Arton0306 來自: 220.135.221.195 (02/21 23:20) ※ 編輯: Arton0306 來自: 220.135.221.195 (02/22 21:10) 我好像有點頭緒了 我在外部的程序輸出導向是這樣 proc.BeginErrorReadLine(); proc.BeginOutputReadLine(); 他可能把每次遇到\r \n都用ReadLine吃下來 並且把\r \n都去除掉 最後丟給backgroundWorker_Build_ProgressChanged的時候 ABC\nNR\rXYZ其實丟了3次 分別是 ABC NR XYZ 然後每次都加上S 造成我以為\r \n被換成S 以上是我的猜測 但就算正確我目前還沒想到解法 我希望外部程序的\n \r都不要變 ※ 編輯: Arton0306 來自: 220.135.221.195 (02/22 21:17) ※ 編輯: Arton0306 來自: 220.135.221.195 (02/22 21:25) 我的問題起因是 我真正要呼叫的外部程式他會不斷地印出值 而且有個位置是數字不停在變 我想它是利用\r退位不斷地印 造成數字在同一個位置不停變化 如果我程式把\r和\n當成一樣就會有問題了 ※ 編輯: Arton0306 來自: 220.135.221.195 (02/22 22:32) ※ 編輯: Arton0306 來自: 220.135.221.195 (02/22 22:33)

02/24 15:28, , 1F
在做程式設計,請不要用"好像"這種字眼...
02/24 15:28, 1F
文章代碼(AID): #1DOdx1ei (C_Sharp)
文章代碼(AID): #1DOdx1ei (C_Sharp)