如何将事件从一个线程发送到另一个线程

本文关键字:线程 一个 另一个 事件 | 更新日期: 2023-09-27 18:01:14

我有一个线程,它从传感器接收数据,并引发事件。这个速率可能相当快。我还使用WPF来显示数据。

一方面,数据对于UI线程来说来得太快尝试以这种速度更新UI是愚蠢的。

另一方面,我正在开发一个需要所有数据的类做它的工作。让我们称之为运动处理器(MP(。

目前MP是从主UI线程中实例化的,所以我必须移动它进入自己的线程。而且我不知道如何连接听众从一个线程到另一个线程。这是第一个问题。

理想情况下,我希望MP线程接收来自传感器的所有更新线程和MP线程将向UI线程激发事件。或者MP线程将具有绑定到UI元素的属性,并在慢得多并且定时的速率。

我可以手动轮询时间并以这种方式更新属性。。。但我以前使用过线程计时器,它似乎是一种更干净的方法。但这又增加了一条线索,可能会使事情变得更加复杂。

我知道传感器线程实际上正在执行处理程序,我想减少它正在做的工作,这样就不太可能遗漏数据来自传感器。

所以我想这是一个设计问题,关于其他人将如何处理具有以下关键点:

  1. 传感器线程需要快速推送数据并返回监听更多数据
  2. MP线程需要接收数据,做一堆事情,包括以合理的速度更新UI

感谢您的意见。

如何将事件从一个线程发送到另一个线程

总之,你想在后台运行一个监视器任务,将所有数据提供给你的"MP"类并定期更新你的UI吗?

我要谈的第一点是关于你的发言:"目前MP是从主UI线程中实例化的,所以我必须将其移动到自己的线程中。我不知道如何将侦听器从一个线程连接到另一个线程。这是第一个问题。">

从UI线程实例化MP类的事实与它将在其上运行的线程无关。MP类中的每个方法和属性都可以设置为在独立线程上运行,而不管实例化它的类在哪个线程上运行。

您需要解决的问题是传感器、MP和UI之间的合理关系。

根据如何填充UI的数据,实际的方法会有很大的不同(我们是从代码隐藏、依赖属性还是视图模型更新UI?(,但基本流程应该是这样的:

  1. 传感器将所有数据发送到MP类
  2. MP类处理数据,并以设定的时间间隔(使用System.Timers中的东西或带有Task.Delay的异步方法来执行计时(引发您的"UI Needs Update"方法

如前所述,实际的"UI需要更新"方法将根据UI与数据的绑定方式而有所不同。

希望能有所帮助。