C# 在不阻塞接收器的情况下解码线程中的连续数据流
我在我的项目中使用UART到USB通信,FTDI芯片 我从UART接收到连续的数据流。我想对接收到的数据进行解码。我已经为从FTDI芯片接收到的字符启用了事件处理程序。因此,每当我接收到任何数据时,它都会到达这个单独的线程C# 在不阻塞接收器的情况下解码线程中的连续数据流,c#,multithreading,ftdi,C#,Multithreading,Ftdi,我在我的项目中使用UART到USB通信,FTDI芯片 我从UART接收到连续的数据流。我想对接收到的数据进行解码。我已经为从FTDI芯片接收到的字符启用了事件处理程序。因此,每当我接收到任何数据时,它都会到达这个单独的线程 //Event Wait Handle private EventWaitHandle DataReceived = new EventWaitHandle(false, EventResetMode.AutoReset); 我利用一个背景工作者 BackgroundWor
//Event Wait Handle
private EventWaitHandle DataReceived = new EventWaitHandle(false, EventResetMode.AutoReset);
我利用一个背景工作者
BackgroundWorker DataHandler = new BackgroundWorker();
DataHandler.DoWork += new DoWorkEventHandler(DataHandler_DoWork);
启动单独的线程进行读取
if (!DataHandler.IsBusy)
DataHandler.RunWorkerAsync();
我注意到DecodeData功能在解码接收到的数据时会阻止数据的接收。有什么方法可以完成此任务吗
以下是函数:
void DataHandler_DoWork(object sender, DoWorkEventArgs e)
{
UInt32 numBytes = 0;
byte[] readArray = new byte[1025];
// Loop forever
for (; ; )
{
// Wait for a FT_EVENT_RXCHAR event
if (DataReceived.WaitOne(100))
{
// Find out how many bytes have been received
if ((ftStatus = _ftdiHelper.GetDataBytes(this, ref numBytes)) != FTDI.FT_STATUS.FT_OK)
{
continue;
}
// Read the bytes out
if ((ftStatus = _ftdiHelper.ReadFromFTDI(readArray, numBytes, ref numBytes)) != FTDI.FT_STATUS.FT_OK)
{
continue;
}
_decodeResponse.DecodeData(this, readArray);
Array.Clear(readArray, 0, readArray.Length);
}
if (DataHandler.CancellationPending)
break;
}
}
您需要另一个线程—一个线程读取,另一个线程处理。我如何将数据(在我的例子中是ReadArray)传递给该线程?例如,您可以使用并发队列。是否有相关的示例代码?用于创建单独的线程并在每次接收数据字节时传递ReadArray?你能在这里发布链接吗?这是一个典型的“生产者-消费者”用例。为消费者和生产者以及
阻止集合
和添加
和获取消费者的真实性()方法使用不同的线程。详情请阅读。