目前我正在开发一个应用程序,该应用程序通过串行端口从 RFID 读卡器接收数据。数据,然后数据应该通过 TCP/IP 发送到服务器。
我已经让这两项工作都在工作,但不是同时进行。我可以从卡中读取 ID,还可以向服务器发送一些文本。但我想征求您的建议,这两件事协同工作的最佳解决方案是什么。
目前我有 TCP/IP 使用和串行使用两个类别。从主类中,我创建两个类的对象并启动一个从串行端口读取数据的线程。
我应该尝试这样的事情吗?
在类中,我将仅创建串行使用对象并调用处理读取的线程。在该读取线程内部,我将调用一个新线程,该线程将打开 TCP/IP 连接并发送从串行端口收到的数据。
另一种类似的方法会从主类打开两个连接,但它会从串行端口接收线程启动 TCP/IP 发送线程(通过已经打开的连接)。
我在线程方面没有太多经验,因此我向其他软件开发人员寻求帮助。谢谢! (如果这有帮助,我可以在此处粘贴部分代码)。
更新:
这就是提示,我会仔细研究您的建议。我想这是个好主意,但正如我所说,我在线程方面没有太多经验。如果我在这些类中创建单独的线程,并且它们都使用相同的对象,比如说 Message 类的对象,我会在 COM 处理线程中创建新对象,并且 TCP/IP 处理线程将使用该对象,那么它会工作吗?通过 TCP/IP 发送数据?我可以像使用 List 一样创建 Message 类对象的队列吗?另外,我如何将类中一个线程中创建的对象队列传递给另一个线程
最佳答案
将两种不同的通信方法抽象为单独的类是很好的设计,所以我会坚持这样做。
不要在主类中处理线程,而是让每个通信类处理自己的线程管理并通过共享 threadsafe queue 在它们之间进行通信。 。
然后,您的串行通信对象可以处理与串行端口的通信、读取数据并将该数据放入队列中。 TCP 通信对象可以处理连接、重新连接、断开连接等...并使用队列中的数据并将其发送到套接字并在网络上发送出去。
您的主类可以创建队列并在同一队列实例中传递两个通信对象。
关于C# TCP/IP 客户端发送从串行端口接收到的数据 - 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139247/