当前位置: 首页 > 编程语言 > C#

关于使用RFID进行C#线程处理的问题分享

时间:2023-04-10 11:23:58 C#

关于使用RFID进行C#线程处理的问题我的问题是关于确保我采用正确的方法并正确处理线程。我觉得我可能需要建立一些自己的线程,因此欢迎所有反馈。我遇到的问题是从零个或多个RFID阅读器读取RFID标签。我可以毫无问题地从一个读者那里阅读,所以从几个读者那里阅读也不成问题。阅读器读取的每个标签或标签批次由.Net事件提供。我的计划是有一个ReaderControl类来维护阅读器,连接,启动,停止等。这个类会监听阅读器的TagRead事件。它处理的每个事件(大约每250毫秒)都会将读取的标签ID(字符串)放入HashSet中以保持它们的唯一性,HashSet位于ReaderControl中。ReaderControl将包含一个每500毫秒触发一次的计时器,此TimerElapsed事件由ReaderControl处理,它将打包到目前为止从所有阅读器读取的标签并引发TagsRead事件。这样做的目的是将事件触发保持在最低限度并减少重复标记。TagsReads事件由另一个名为TagTranslator的类处理。此类将遍历标签ID(字符串)并计算出标签所指的内容,即IPerson对象。此类将使用PeopleSeen事件在翻译完成时触发事件。PeopleSeen事件由GUI中的模型(MVP模式)处理。一般的想法是GUI显示显示通过RFID阅读器的人的名字。显示很简单,但显然在引擎盖下标签正在异步读取并转换为“真实”对象以供显示。您认为ReaderControl应该在其自己的线程上运行,我认为应该如此。我如何将此类包装在它自己的线程中,并且无论GUI在做什么,都只继续阅读标签。另外,您认为TagTranslator在处理事件时应该创建一个线程来处理翻译。我建议不要使用事件,而是使用并发队列数据结构和多生产者、单一消费者模型。将标签阅读器线程视为生产者,将处理线程视为消费者。当线程从阅读器接收到标签时,它会将该标签添加到队列中,而不必担心重复或任何事情。哎呀,您可能在某个时候想要那些重复的消息。没有理由把它扔在这里。消费者在队列中等待,关闭项目并一次处理一个项目。BlockingCollection类非常适合这种情况。//共享队列。假设标签只是一个字符串。BlockingCollectionTagQueue=newBlockingCollection();//标记阅读器线程(生产者)while(!ShutdownMessageReceived){stringtag=GetTagFromReader();//但是已经完成了TagQueue。添加(标签);}//处理线程(消费者)while(!ShutdownMessageReceived){stringtag=TagQueue.Take();//处理标签}BlockingCollection支持多个生产者和消费者,所以你可以有多个生产者和消费者。Take方法将阻塞,直到有一个项目可用。这是一个非忙等待,因此没有轮询开销。这种功能很容易通过BlockingCollection实现,并且代码简洁明了。以上就是C#学习教程:C#线程使用RFID问题分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: