【问题标题】:Best method for handling asynchronous USB data requests?处理异步 USB 数据请求的最佳方法?
【发布时间】:2013-12-21 00:19:12
【问题描述】:

我目前有一个用Visual C# (2013) 编写的控制台应用程序。它打开到USB Multimeter 的连接,然后将值写入控制台。我现在想把它变成一个合适的WinFormsWPF 应用程序(数据被接收,数据被发送到 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


【解决方案1】:

Asryael,您的应用程序听起来很有趣。要美化它,您可以创建一个 WPF MVVM 应用程序。 听起来并不难。

这是一个基本教程: http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial

基本思路:

xaml - 定义用户界面。随心所欲。

然后将 xaml 数据中的变量绑定到属性(变量) 每次从 USB 万用表获取更新时,更新线程中的变量。

玩得开心。您的应用程序听起来很有趣...

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 2019-08-05
    • 2015-06-18
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多