我是这个论坛的新手,有一个问题困扰了我一段时间。我的设置是使用 USB/uart 转换器连接到我的电脑的串行字符显示器。我正在以 C++ 样式在单独的写入缓冲区线程中通过 serialPort 类将字节传输到显示器:
private void transmitThread(){
while(threadAlive){
if(q.Count > 0){ // Queue not empty
byte[] b = q.Dequeue();
s.Write(b,0,b.Length);
System.Threading.Thread.Sleep(100);
}
else{ // Queue empty
System.Threading.Thread.Sleep(10);
}
}
}
假设串行端口已经打开,这可以完美运行并将所有数据传输到显示器。尽管此代码段中根本没有异常处理。因此,我正在研究实现一个典型的 C# 功能,即“使用”语句,并且只在需要时打开端口,如下所示:
private void transmitThread(){
while(threadAlive){
if(q.Count > 0){ // Queue not empty
byte[] b = q.Dequeue();
using(s){ //using the serialPort
s.Open();
s.Write(b,0,b.Length);
s.Close();
}
System.Threading.Thread.Sleep(100);
}
else{ // Queue empty
System.Threading.Thread.Sleep(10);
}
}
}
这个函数的问题是,它只传输随机数量的数据,通常约为 80 字节字节数组的三分之一。我尝试了线程的不同优先级设置,但没有任何变化。
我是否遗漏了一些重要的东西,或者我只是在发送请求后关闭端口太快?
我希望你能帮助我。谢谢 :)