2

私の会社は、USB経由でPCに接続する製品を製造しています。この製品用にVisualC#を使用してDLLドライバーを作成しているので、制御またはデバイス化できるプログラムを作成したい人は誰でも作成できます。ドライバーが実行する操作の一部は、デバイスが完了するまでに数秒かかります(たとえば、デバイス内でモーターを10,000ステップ移動するなど)。このドライバーに対して2つの異なるアプローチを検討していますが、どちらが理想的かわかりません。

最初のアプローチ:コマンドを非ブロッキングにします。基本的に、クライアントアプリケーションは私のdllのメソッドを呼び出してモーターの回転を開始し、そのメソッドはすぐに戻ります。次に、移動が終了したときにトリガーされるイベント「MoveFinished」があります。このアプローチにより、マルチスレッドを使用せずに、モーターの移動中にクライアントアプリケーションがフリーズしたり他の操作を実行したりすることがなくなります。

2番目のアプローチ:コマンドをブロックします。したがって、クライアントアプリケーションがMoveメソッドを呼び出すと、メソッドはブロックされ、移動が完了するまで戻りません。これにより、移動中にクライアントアプリケーションがフリーズします(マルチスレッドを使用している場合を除く)が、クライアントアプリケーションがデバイスの実行中にmoveメソッドを呼び出すなどのばかげた間違いを犯さないようにするという点でも役立ちます。すでに動いています...

誰かが共有する経験、知恵、コメントまたは考えを持っていますか?

4

1 に答える 1

2

私は両方をします。デバイスにAPIを書き込んでいるので、最終的なユーザーに、メソッドの動作方法を柔軟に決定できるようにします。同期または非同期のいずれか。

ルートを1つしか選択できない場合は、非同期を使用します。その理由は、デバイスに対して開発しているほとんどのユーザーは、デバイスがプロセスを完了している間、アプリケーションがフリーズすることを望まない可能性が高いためです。

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

于 2009-12-16T16:06:13.173 に答える