读书人

c# 两个线程 循环读写数据的有关问题

发布时间: 2013-03-13 10:56:58 作者: rapoo

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一下的。不然会卡。。

读书人网 >C#

热点推荐