[問題] BeginOutputReadLine
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
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):