C# 在不冻结GUI的情况下与设备通信的最佳方式
我是c#新手,现在需要构建一个GUI来控制带有多个设备的测试系统。我已经为每个设备创建了一个类库(dll)。现在我想用方法向他们发送一些命令 但部分通信可能需要一些时间,例如从示波器获取原始数据或使用计时器检查其连接状态。这导致GUI冻结 所以现在我想知道,将这种通信外包给其他线程的最佳方式是什么?。所有通信都是独立的,我可以并行地完成大部分通信。所以我基本上在寻找一种方法,例如,在不同的worker中创建一个完整的类,调用一个方法,让它以事件的形式响应 编辑: 通信使用“ActiveDSO”完成,这是Lecroy示波器使用的一种特殊方式(实际使用的是以太网,但我只调用其第三方库的函数)。C# 在不冻结GUI的情况下与设备通信的最佳方式,c#,multithreading,user-interface,communication,C#,Multithreading,User Interface,Communication,我是c#新手,现在需要构建一个GUI来控制带有多个设备的测试系统。我已经为每个设备创建了一个类库(dll)。现在我想用方法向他们发送一些命令 但部分通信可能需要一些时间,例如从示波器获取原始数据或使用计时器检查其连接状态。这导致GUI冻结 所以现在我想知道,将这种通信外包给其他线程的最佳方式是什么?。所有通信都是独立的,我可以并行地完成大部分通信。所以我基本上在寻找一种方法,例如,在不同的worker中创建一个完整的类,调用一个方法,让它以事件的形式响应 编辑: 通信使用“ActiveDSO”完
实际上,使用asyc/await更改为.Net 4.5+解决了我的问题,谢谢。使用
async
和await
关键字:async和await可以帮助您解决问题。
下面是一个示例因此,您已经发现需要多个线程。你到底在问什么?如何在C#中进行线程编程?你知道你需要一个不同的线程,所以只需查找C#的线程编程方法。例如任务并行库:您需要描述这种“通信”;是通过USB吗?互联网?如果它在I/O上被阻塞,旋转另一个线程只会阻塞新线程。在这种情况下,调查。