.net 更新UI控件的正确方法

.net 更新UI控件的正确方法,.net,c++-cli,.net,C++ Cli,我正在开发一个软件,需要不断地从串行端口读取数据,并向用户显示值 所以我有一个线程,它有一个循环,不断地读取串行端口。 为了获得流畅的用户体验,更新表单控件的正确方法是什么? 到目前为止,我发现计时器不起作用,因为读取线程会阻止它的执行,如果我在线程中创建一个带有thread::Sleep(300)的新线程也不起作用 顺便说一句,正如您可能已经注意到的,我是c++/cli新手。考虑在c++/cli中使用BackgroundWorker组件。msdn中定义的后台工作人员: BackgroundWo

我正在开发一个软件,需要不断地从串行端口读取数据,并向用户显示值

所以我有一个线程,它有一个循环,不断地读取串行端口。 为了获得流畅的用户体验,更新表单控件的正确方法是什么? 到目前为止,我发现计时器不起作用,因为读取线程会阻止它的执行,如果我在线程中创建一个带有
thread::Sleep(300)
的新线程也不起作用


顺便说一句,正如您可能已经注意到的,我是c++/cli新手。

考虑在c++/cli中使用BackgroundWorker组件。msdn中定义的后台工作人员:

BackgroundWorker类允许您在服务器上运行操作 独立的、专用的线程。像下载这样耗时的操作 而数据库事务可能会导致用户界面(UI)看起来 就好像它在运行时停止了响应。当你 想要一个响应迅速的用户界面,您将面临与之相关的长时间延迟 通过这些操作,BackgroundWorker类提供了一个方便的 解决方案

将循环代码和与UI控件通信的代码放入DoWork事件中

检查本教程,该教程分步骤说明如何在C++/CLI中使用BackgroundWorker

但在进入本教程之前,我建议您了解.net中的后台工作程序,以便了解其工作原理


SerialPort具有DataReceived事件。这样就不需要线程了,从那里开始吧。不幸的是,我的时间很紧,DataReceived事件不够快。这毫无意义。它是一个串行端口,很容易比以太网连接慢100倍。这是我最初的想法。使用DataReceived事件是我的第一选择,但它很慢,正如我所说的,我的时间很紧,另一个设备的超时时间很小(比如25ms)。在Windows上,你无法获得25毫秒的保证,如果机器被加载或它的内存页被调出,线程很容易丢失处理器数百毫秒。你需要一个驱动器或一个微控制器才能得到这样的保证。