作者Arton0306 (Ar藤)
看板C_Sharp
标题[问题] BeginOutputReadLine
时间Mon Feb 21 23:03:26 2011
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)
1F:→ pico2k:在做程式设计,请不要用"好像"这种字眼... 02/24 15:28