質問

私の会社は、USB経由でPCに接続し、製品を作ります。私はこの製品のためには、Visual C#を使用して、DLLドライバを書いていますように制御することができますまたはデバイスがそうすることができるプログラムを書きたい人。ドライバが実行されることを事業の一部は(デバイス万のステップでモーターを動かすなど)が完了するデバイスのために数秒かかります。私は、このドライバには2つの異なるアプローチを検討していると私は理想的であるかわからない。

最初のアプローチ:コマンド非ブロッキングを行います。基本的には、クライアント・アプリケーションは、モータの回転を開始するために、私のDLL内のメソッドを呼び出すと、そのメソッドはすぐに戻ります。それから私は、移動が終了したときにトリガーされるイベント、「MoveFinished」を持っているでしょう。このアプローチは、アップが凍結し、モータはマルチスレッドを使用せずに移動している間に他の操作をしないと、クライアント・アプリケーションを可能にする。

第二のアプローチ:コマンドがブロックしてください。だから、クライアントアプリケーションは、Moveメソッド、メソッドのブロックを呼び出し、移動が完了するまで戻らないとき。これは、(彼らはマルチスレッドを使用しない限り)移動が行われている間に、クライアントアプリケーションがフリーズする原因となるが、それは、クライアント・アプリケーションは、デバイス間、moveメソッドを呼び出すようなダム間違いを犯すことを許可しませんという点で、それはまた、役に立つかもしれませんすでに動いている...

誰もが共有するために任意の経験、知恵、コメントや考えを持っていますか?

役に立ちましたか?

解決

私は両方を行うだろう。あなたのデバイスにAPIを書いているので、私は、最終的なユーザーに、彼らは方法が動作する方法を決定するための柔軟性を与えるだろう。同期または非同期のどちらか。

あなたが1つのルートのみを選択することができた場合は、

私は非同期に有利に働きます。その理由は、デバイスに対して開発ほとんどのユーザーが最も可能性の高いデバイスは、プロセスを完了している間凍結するが、アプリケーションを好きではないだろうということです。

あなたが話しているイベント構造は良好です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top