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

时间:2009-12-16 16:00:59

标签: c# multithreading driver blocking nonblocking

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

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

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

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

1 个答案:

答案 0 :(得分:2)

我会做两件事。由于您正在为您的设备编写API,因此我会让最终用户灵活地决定他们希望该方法如何运行。同步或异步。

如果你只能选择一条路线我会赞成Async。原因是大多数针对该设备开发的用户很可能不喜欢在设备完成流程时应用程序冻结。

您所谈论的事件结构很好。