C# C语言中的连续RS485通信与用户界面#

C# C语言中的连续RS485通信与用户界面#,c#,backgroundworker,C#,Backgroundworker,我有RS485从设备连接到计算机。计算机询问设备一些问题并等待响应 通信应与用户界面保持一致,以显示来自设备的数据并实时控制它们 我已经开发了一些应用程序与RS485通信与使用bacgroundWorker 我不确定,但我认为这不是这次使用它的正确方式,因为backgroundWorker无法更改或更新用户界面元素 我可能会使用backgroundWorker和全局数据变量,然后根据计时器事件更新UI。但我对这个解决方案感到担忧。 谢谢 我设计了远程监控系统,该系统通过RS-485与控制器协同工

我有RS485从设备连接到计算机。计算机询问设备一些问题并等待响应

通信应与用户界面保持一致,以显示来自设备的数据并实时控制它们

我已经开发了一些应用程序与RS485通信与使用bacgroundWorker

我不确定,但我认为这不是这次使用它的正确方式,因为backgroundWorker无法更改或更新用户界面元素

我可能会使用backgroundWorker和全局数据变量,然后根据计时器事件更新UI。但我对这个解决方案感到担忧。
谢谢

我设计了远程监控系统,该系统通过RS-485与控制器协同工作。它实现为在SQL Server中写入数据的Windows服务。UI应用程序(在我的上一个版本中是Web应用程序)从SQL获取数据。在以前的版本中,我使用了命名管道。

您不需要使用后台工作程序,因为串行端口支持异步操作-您订阅了
DataReceived
,打开端口后,您的事件将使用收到的数据定期调用


然后,您需要缓冲数据,直到构建完整的消息包(您可能会获得零散的数据,但不能保证您将获得完整格式的数据包),然后更新UI(通常使用BeginInvoke将控制权传递回UI线程)

你能显示代码吗?这不是OP要求的。我建议使用Windows服务作为一种方式。怎么了?混合使用服务器和客户端是不好的,我在这里猜测,但我认为OP只是编写了一个用于监控通信的简单工具。我不认为在他的情况下添加Windows服务是合理的。另外,一切都不需要基于服务器-客户机体系结构。BeginRead?哪个版本?我在.NET4.5中没有BeginRead方法。对不起,内存有问题!您不需要启动读取,只需订阅DataReceived事件并打开端口,只要数据就绪,就会被回调。(BeginRead用于其他异步操作,例如流上。我编辑了答案以更正此错误)您的错误是SerialPort.BaseStream.BeginRead()。