正在使用逗号分隔字符串作为分隔符。每次打印字符串时,它都会以不同的顺序显示。 String是可变的: '字符串:Z1,TA,H999.00,T999.00' 它成功分裂,但即使字符串完全相同,在打印数组时,我们也会得到随机的新行和随机数据。
当打印到文本框时,它正确分割,或者像: -Z1 -T -H999.00 -T999。 -00 如果Loop再次运行,我们会得到不同的结果。奇怪的是,它正确显示。
我假设它的代码是:(编辑:不是)
string[] ArrayCleanDataRX = CleanDataRX.Split(',');
foreach (string EntireList1 in ArrayCleanDataRX)
{
TxtZ1.AppendText(EntireList1);
TxtZ1.AppendText("\n");
}
任何建议都会很精彩。 谢谢。
更新:(尚未解决) 更新2:更多代码 -
#region Global Strings
public string DirtyDataRX; //String contains Data from Serial
public string Z1 = "Z1"; //String to check if Data from serial Contains Z1
private void FeedbackProcessing(object sender, EventArgs e)
{
TxtDirtyDataRX.AppendText(DirtyDataRX); //Populate TxtDirtyTest with DirtyText String
var CleanDataRX = DirtyDataRX; //Clean Data = Dirty Text
var charstoremove = new string[] { "|", "-", "%", " ", " ", " ", "~", "$", "?", "'", ".,", "..,", "..", "..:", ".:", "...", "....", ".....", "......", "......", "......", "-" }; // Contents of CharsToRemove (Removes Bad Charecters from raw serial)
foreach (var c in charstoremove) //C is Char(s) to remove
{
CleanDataRX = CleanDataRX.Replace(c, string.Empty); //Replace C in CleanDataRX with nothing.
}
TxtCleanDataRX.AppendText(CleanDataRX); //Show DirtyDataRX in DirtyDataRX Textbox
#region IfZones and Array Loops
if (CleanDataRX.Contains(Z1)) // If CleanDataRX Contains "Z1" Run Code
{
string[] ArrayZ1 = CleanDataRX.Split(','); //New String Array from CleanDaraRX. Split using Comma as Delimiter
foreach (string StrArrayZ1 in ArrayZ1) // New string Called StrArrayZ1 in ArrayCleanDataRX
{
TxtZ1.AppendText(StrArrayZ1); //Append Textbox with String Array, Loop untill Empty
}
}
#region DirtyRX
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
DirtyDataRX = serialPort1.ReadExisting();
this.Invoke(new EventHandler(FeedbackProcessing));
}
#endregion
我觉得代码是错误的,因为这个问题被排除在外以简化问题。 注意:某些阵列名称已被略微编辑..
答案 0 :(得分:0)
这种代码的和平不足以回答这个问题。但是,如果您使用多线程,则必须使用锁以避免危险结果。
示例:
lock(TxtZ1)
{
string[] ArrayCleanDataRX = CleanDataRX.Split(',');
foreach (string EntireList1 in ArrayCleanDataRX1)
{
TxtZ1.AppendText(EntireList1);
TxtZ1.AppendText("\n");
}
}
答案 1 :(得分:0)
TxtZ1是一个文本框?
然后你应该做类似的事情:
string[] ArrayCleanDataRX = CleanDataRX.Split(',');
StringBuilder sb = new StringBuilder();
foreach (string EntireList1 in ArrayCleanDataRX)
{
sb.AppendLine(EntireList1);
}
TxtZ1.AppendText(sb.ToString());
我认为如果你使用Environment.Newline而不是\ n,它也会解决它。 Windows控件中的\ n往往会发生奇怪的事情......
答案 2 :(得分:0)
感谢您的帮助。问题在我自己解决了...... 这不完全是循环,或分裂...对不起。 这可能有助于其他人...... 由于正在积极构建字符串,因此抛出了错误。问题在于如何在串口读取方法中读取数据,这就是它:
DirtyDataRX = serialPort1.ReadExisting();
this.Invoke(new EventHandler(FeedbackProcessing));
由于传入的数据是面向行的。应该使用ReadLine ....
DirtyDataRX = serialPort1.ReadLine();
this.Invoke(new EventHandler(FeedbackProcessing));
使用ReadLine解决了手头的问题。