C# 设备驱动程序DLL阻塞与非阻塞?

C# 设备驱动程序DLL阻塞与非阻塞?,c#,multithreading,driver,blocking,nonblocking,C#,Multithreading,Driver,Blocking,Nonblocking,我的公司生产一种通过USB连接到电脑的产品。我正在使用Visual C#为该产品编写一个DLL驱动程序,以便任何想要编写能够控制或控制设备的程序的人都可以这样做。驱动程序将执行的某些操作需要几秒钟才能完成(例如,在设备中移动电机10000步)。我正在考虑两种不同的方法来解决这个问题,我不确定哪种方法是理想的 第一种方法:使命令非阻塞。基本上,客户端应用程序将调用我的dll中的一个方法来启动电机转动,该方法将立即返回。然后我会有一个事件“MoveFinished”,在移动完成时触发。这种方法允许客

我的公司生产一种通过USB连接到电脑的产品。我正在使用Visual C#为该产品编写一个DLL驱动程序,以便任何想要编写能够控制或控制设备的程序的人都可以这样做。驱动程序将执行的某些操作需要几秒钟才能完成(例如,在设备中移动电机10000步)。我正在考虑两种不同的方法来解决这个问题,我不确定哪种方法是理想的

第一种方法:使命令非阻塞。基本上,客户端应用程序将调用我的dll中的一个方法来启动电机转动,该方法将立即返回。然后我会有一个事件“MoveFinished”,在移动完成时触发。这种方法允许客户端应用程序在电机移动时不冻结并执行其他操作,而不使用多线程

第二种方法:使命令阻塞。因此,当客户端应用程序调用Move方法时,该方法会阻塞,直到移动完成后才会返回。这将导致客户端应用程序在移动过程中冻结(除非它们使用多线程),但这也很有用,因为它不允许客户端应用程序犯愚蠢的错误,例如在设备已经移动时调用move方法


有人有什么经验、智慧、评论或想法可以分享吗?

我会两者兼而有之。由于您正在向设备中编写API,我将为最终用户提供灵活性,以决定他们希望该方法如何操作。同步或异步

如果您只能选择一条路由,我会选择异步。原因是,大多数针对该设备开发的用户很可能不希望在该设备完成一个过程时冻结该应用程序

你所说的活动结构是好的