我有一个串口读取设备中的字符串行。 我创建了一个名为Node的类,它将字符串中的三条信息存储在它们自己的变量中。
Node.cs
class Node
{
public Int32 Count;
public Int32 ID;
public Int32 Length;
public String Data;
public Node(Int32 ID, String Data, Int32 Length)
{
Count = 1;
this.ID = ID;
this.Data = Data;
this.Length = Length;
}
public override String ToString()
{
return ID.ToString() + " [" + Data + "] " + Length.ToString();
}
public static Boolean Equals(Node cmp, Node cmp2)
{
return (cmp.ID == cmp2.ID && cmp.Data == cmp2.Data);
}
}
backgroundworker位于另一个名为SerialThread.cs的类中 串行端口从设备读取一行数据并创建一个Node对象,并将该节点存储在List中。
private void thread_DoWork(object sender, DoWorkEventArgs e)
{
if (serial.IsOpen)
{
GUI.UpdateStatusLabelText("Connected to " + portName);
}
while (serial.IsOpen)
{
String buffer = serial.ReadLine();
String[] parsed;
if (buffer.Length > 10)
{
GUI.UpdateStatusLabelText("stuck");
parsed = buffer.Split('+');
Node parseNode = new Node(Int32.Parse(parsed[0]), parsed[1], Int32.Parse(parsed[2]));
list.AddToList(parseNode);
}
}
}
线程将循环一次并成功将节点对象添加到列表中。然而它在第一次之后将不再循环(有一次它增加了两次,但从未得到任何大于此值)。
经过一些试验和错误,我在全局变量中创建了一个保持相同的Node,然后注释掉了" Node parseNode = new ..."并将该全局节点添加到列表中,然后列表继续增长。
因此,在重新创建parseNode对象时,线程将会冻结。