Блокировка DLL драйвера устройства или неблокировка?

Моя компания производит продукт, который подключается к ПК через USB. Я пишу драйвер DLL, используя Visual C#, для этого продукта, чтобы любой, кто хочет написать программу, которая может управлять устройством или устройством, мог это сделать. Некоторые из операций, которые будет выполнять драйвер, занимают несколько секунд для завершения устройства (например, перемещение двигателя в устройстве на 10 000 шагов). Я рассматриваю два разных подхода к этому драйверу, и я не уверен, какой из них идеален.

Первый подход: сделайте команды неблокирующими. По сути, клиентское приложение вызывало метод в моей dll, чтобы запустить двигатель, и этот метод немедленно возвращался. Тогда у меня будет событие «MoveFinished», которое запускается, когда перемещение завершено. Такой подход позволил бы клиентскому приложению не зависать и выполнять другие операции во время движения мотора без использования многопоточности.

Второй подход: сделайте блокировку команд. Поэтому, когда клиентское приложение вызывает метод Move, метод блокируется и не возвращает значение, пока перемещение не будет завершено. Это может привести к зависанию клиентского приложения во время перемещения (если только они не используют многопоточность), но это также может быть полезно, поскольку не позволит клиентскому приложению делать глупые ошибки, такие как вызов метода перемещения во время перемещения устройства. уже движется...

Есть ли у кого-нибудь опыт, мудрость, комментарии или мысли, которыми можно поделиться?


person PICyourBrain    schedule 16.12.2009    source источник


Ответы (1)


Я бы сделал оба. Поскольку вы пишете API на своем устройстве, я бы предоставил конечному пользователю возможность решать, как он хочет, чтобы метод работал. Либо синхронный, либо асинхронный.

Если вы можете выбрать только один маршрут, я бы предпочел Async. Причина в том, что большинство пользователей, работающих с устройством, скорее всего, не хотели бы, чтобы приложение зависало, пока устройство завершает процесс.

Структура событий, о которой вы говорите, хороша.

person David Basarab    schedule 16.12.2009