BackgroundWorker卡住了

时间:2015-05-27 00:19:00

标签: c# list backgroundworker

我有一个串口读取设备中的字符串行。 我创建了一个名为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对象时,线程将会冻结。

0 个答案:

没有答案