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

问题描述:

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

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

第二种方法:使命令阻塞。因此,当客户端应用程序调用Move方法时,该方法会阻止并在移动完成之前不会返回。这会导致客户端应用程序在发生移动时冻结(除非他们使用多线程),但也可能有用,因为它不会让客户端应用程序发生愚蠢的错误,例如在设备上调用移动方法已经在移动...

有没有人有任何经验,智慧,意见或想法分享?

我会这样做。由于您正在将API写入您的设备,因此我会让最终用户灵活地决定他们希望如何操作该方法。同步或异步。

如果您只能选择一条路线,我会倾向于异步。原因是大多数用户在设备开发过程中很可能不喜欢应用程序在设备完成过程时冻结。

你说的事件结构是好的。