【发布时间】:2023-12-10 10:30:02
【问题描述】:
我正在构建一个可以实时监控某些 MCU 硬件(传感器读数等)的应用程序。对于通信,我使用的是 CAN 总线。
到目前为止,我基本上有 2 个线程。一个是运行 GUI 的主线程,另一个是管理/监控设备之间的通信。所以显而易见的是,我需要将数据从通信线程传递到 gui 线程。但是,正确的方法应该是什么?我知道当子线程完成工作后如何将数据传回调用线程,但在这种情况下,通信线程一直在运行。
当然,通信逻辑由一个单独的类 (CANManager) 表示。
我有几个自己的想法,但是我想知道如何做到这一点的“正确”方式是什么。
提前致谢:)
【问题讨论】:
-
但是正确的做法应该是什么?可能与google.com.au/search?q=wpf+invoke+on+main+thread重复
-
查看 BackgroundWorker 类,您可以在其中使用“ProgressChanged”事件:msdn.microsoft.com/en-us/library/… |当您使用 .NET 4.5 时,您还可以使用 Task 类,它可以让您在子进程完成后继续执行相同的进程:msdn.microsoft.com/en-us/library/dd270696(v=vs.110).aspx
-
我最初的想法只是创建一个“存储类”,它将所有必要的值作为属性保存。所以我可以从我的通信线程异步更新这些属性,然后将这些属性绑定到 wpf。 :)
-
您的意思是“ViewModel”吗? :)
-
可能是。正如您可能已经猜到的那样,我不是 oop 和 c# 方面的专家,因为我的主要工作是嵌入式 c。但这可能是一回事吗?如果可行,这似乎是最简单的事情?
标签: c# wpf multithreading communication can-bus