【发布时间】:2013-12-21 00:19:12
【问题描述】:
我目前有一个用Visual C# (2013) 编写的控制台应用程序。它打开到USB Multimeter 的连接,然后将值写入控制台。我现在想把它变成一个合适的WinForms 或WPF 应用程序(数据被接收,数据被发送到 UI 线程,数据被显示在表格/图表中等)。为此,我需要在单独的线程上接收数据,因为数据每 0.12 毫秒发送一次(这会锁定主线程上的 UI)。
我已经阅读了有关线程和异步任务的一些资料,但还没有决定哪个最适合该任务。这些(或其他方法)中的哪一种是您实现此目的的首选方法?
请注意,我并不是要求人们为我编写代码,我只是在问哪种方法最好。
【问题讨论】:
-
您真正需要使用的是
Dispatcher,它将另一个线程上的调用编组到 UI 线程。您可以运行BackgroundWorker,它使用您已有的代码查询 USB 端口,然后将任何更新发送到 UI。您甚至可以只使用一个定期触发的计时器 (System.Threading.Timer),并在其中使用调度程序。调度程序将在您的 WPF 窗口/UC 基类上,它需要一个回调,该回调将在 UI 线程上触发:例如Dispatcher.Invoke(()=> { // code to update UI here });
标签: c# wpf multithreading winforms asynchronous