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

时间:2015-07-06 23:33:30

标签: c# wpf multithreading

我有一个从传感器接收数据的线程,我提出了 收到每个数据项后的事件。这个速度可以非常快。 我也使用WPF来显示数据。

一方面,UI线程的数据来得太快了 尝试以该速率更新UI是愚蠢的。

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

目前MP已经从主UI线程实例化,所以我将不得不移动 它进入自己的线程。而且我不确定如何附加听众 从一个线程到另一个线程。这是第一个问题。

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

我可以手动轮询时间并以这种方式更新属性......但我之前使用过线程计时器,它似乎更清洁。但是那时又会在混合中投入一个线程,并且可能会使它变得更加复杂。

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

所以我想这是一个关于其他人如何处理这个问题的设计问题 以下要点:

  1. 传感器线程需要快速推送数据并返回 倾听更多数据
  2. MP线程需要接收它     数据,做一堆包括的东西              以合理的速度更新UI。
  3. 感谢您的任何意见。

1 个答案:

答案 0 :(得分:1)

总而言之,您希望在后台运行一个监控任务,将所有数据提供给您的“MP”类并定期更新您的UI?

我要提出的第一点是关于你的陈述: “目前MP是在主UI线程中实例化的,因此我必须将其移动到自己的线程中。而且我不确定如何将侦听器从一个线程附加到另一个线程。这是第一个问题。”

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

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

根据您为UI填充数据的方式,执行此操作的实际方法会有很大差异(我们是从代码隐藏,依赖项属性还是视图模型更新UI?),但基本流程应该类似于这样:

  1. 传感器将所有数据发送到MP类。
  2. MP类处理数据,并按设定的时间间隔(使用System.Timers中的某些内容或使用Task.Delay的异步方法执行时间)引发“UI需要更新”方法。
  3. 如上所述,实际的“UI需要更新”方法将根据您的用户界面与数据的绑定方式而有所不同。

    希望有所帮助。