【发布时间】:2016-09-06 06:01:06
【问题描述】:
我用串口连接了一个设备,它返回给我“:GS#”字符串。经过长时间的检查,我几乎可以确定问题出在 切换条件,即我的程序从不输入 case 并且总是默认。我在文本框中打印了收到的字符串,它是 ":GS#" !我很困惑。我的错误在哪里?
这是我的代码:
char[] lxCMD = new char[8];
.
.
.
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
serialPort.Read(lxCMD, 0, lxCMD.Length);
this.Invoke(new EventHandler(UpdateVar));
}
private void UpdateVar(object sender, EventArgs e)
{
string strRecieved = "Ack";
if (lxCMD[0] != 0x6)
{
strRecieved = new string(lxCMD);
}
textBox1.AppendText(strRecieved); // This line prints :GS# correctly!
textBox1.AppendText(Environment.NewLine);
switch(strRecieved)
{
case ":GS#":
serialPort.Write("20:08:18#");
textBox1.AppendText("1:");
textBox1.AppendText(Environment.NewLine);
break;
case "Ack":
serialPort.Write("1");
textBox1.AppendText("2:");
textBox1.AppendText(Environment.NewLine);
break;
default:
textBox1.AppendText("Nothing");
break;
}
}
【问题讨论】:
-
您的字符串中是否添加了任何控制字符?也许你应该在切换之前对其进行消毒。
-
字符串末尾是否有空格或不可打印字符?鉴于您的
char[]长度为 8 个字符,字符串也可能是该长度。 -
没有理由不应该工作,除非你没有收到确切的:GS#。检查未打印字符的字符串长度等内容。
-
我通过终端 v1.93b 进行了检查。十六进制字符串是 3A 47 53 23 与 ":GS#" 完全匹配。
-
@Pana - 检查字符串的长度。 .NET 不使用以空值结尾的字符串。
标签: c# winforms switch-statement