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