Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top