【问题标题】:Best way to communicate with a device without freezing GUI [closed]在不冻结 GUI 的情况下与设备通信的最佳方式 [关闭]
【发布时间】:2017-06-02 19:31:39
【问题描述】:

我是 C# 新手,现在需要构建一个 GUI 来控制具有多个设备的测试系统。我为每个设备创建了一个类库 (dll)。现在我想使用方法向他们发送一些命令。

但部分通信可能需要一些时间,例如从示波器获取原始数据或使用计时器检查其连接状态。这会导致 GUI 冻结。

所以现在我想知道将这种通信外包给不同线程的最佳方式是什么?所有通信都是独立的,我可以并行完成大部分通信。所以我基本上在寻找一种方法,例如在不同的工作人员中创建一个完整的类,调用一个方法并让它以事件的形式回答。

编辑: 通信是使用“ActiveDSO”完成的,这是 Lecroy Oscilloscopes 使用的一种特殊方式(实际是使用以太网完成的,但我只调用他们的第 3 方库的函数)。 实际上使用 asyc/await 更改为 .Net 4.5 + 解决了我的问题,谢谢。

【问题讨论】:

  • 所以,您已经发现您需要多个线程。你到底在这里问什么?如何在 C# 中进行线程编程?
  • 你知道你需要一个不同的线程,所以只需查找 C# 的线程处理方法。例如任务并行库:TPL
  • 你需要描述这个“交流”;是通过 USB 吗?互联网?如果它在 I/O 上被阻塞,启动另一个线程只会阻塞你的新线程。在这种情况下调查async/await

标签: c# multithreading user-interface communication


【解决方案1】:

【讨论】:

    【解决方案2】:

    使用asyncawait 关键字:https://docs.microsoft.com/en-us/dotnet/csharp/async

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多