Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不冻结GUI的情况下与设备通信的最佳方式_C#_Multithreading_User Interface_Communication - Fatal编程技术网

C# 在不冻结GUI的情况下与设备通信的最佳方式

C# 在不冻结GUI的情况下与设备通信的最佳方式,c#,multithreading,user-interface,communication,C#,Multithreading,User Interface,Communication,我是c#新手,现在需要构建一个GUI来控制带有多个设备的测试系统。我已经为每个设备创建了一个类库(dll)。现在我想用方法向他们发送一些命令 但部分通信可能需要一些时间,例如从示波器获取原始数据或使用计时器检查其连接状态。这导致GUI冻结 所以现在我想知道,将这种通信外包给其他线程的最佳方式是什么?。所有通信都是独立的,我可以并行地完成大部分通信。所以我基本上在寻找一种方法,例如,在不同的worker中创建一个完整的类,调用一个方法,让它以事件的形式响应 编辑: 通信使用“ActiveDSO”完

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

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

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

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

使用
async
await
关键字:

async和await可以帮助您解决问题。


下面是一个示例

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