日期:2014-05-17  浏览次数:21072 次

c# 两个线程 循环读写数据的问题
第一个线程从HID USB 读数据, 读是用while循环读数据的;
为了提高读的速度,第一个线程读到的数据放入队列中,
第二个线程从队列中取出数据在窗体上显示出来;
第二个线程取出数据也用while循环的,但发现用while循环取数据,窗体会出现未响应,不能显示数据。
用 Thread.Sleep(100) 也没有用。

为了实现第一个线程读数据写入队列,第二个线程取出数据在窗体上显示出来,而且几乎写入队列,与从队列中取出数据几乎是同步的,第二个线程也不使窗体出现未响应,不能显示数据,不知道有没有什么办法?

Thread thread = new Thread(BeginUsbRead);
thread.Start();

Thread thread_do = new Thread(show);
thread_do.Start();

private static IList _Queue1 = new ArrayList();

private void BeginUsbRead()
{
    while(true)
    {
        _Queue1.Add(Guid.NewGuid().ToString);
    } 
}

private void show()
{
    if (_Queue1.Count > 0)
    {
        listBox1.Items.Add(_Queue1[0].ToString());
        _Queue1.RemoveAt(0);
    }
    else
    {
        Thread.Sleep(100);
    }
}
c# thread

------解决方案--------------------
读取队列要加锁

lock(...)
{

...
}

------解决方案--------------------
lock(_Queue1.SyncRoot){
    _Queue1.Add(Guid.NewGuid().ToString);
}

lock(_Queue1.SyncRoot){
    _Queue1.RemoveAt(0);
}
------解决方案--------------------
两个问题
1,读写的时候要加锁
2,while循环里往画面上显示的时候也要sleep一下的。不然会卡。。