機器メーカーが提供する .Net ライブラリに接続できる商用機器がいくつかあります。そのため、ライブラリや機器を制御することはできず、自分のコードのみを制御できます。
メーカーは、ライブラリ経由で機器に接続していない場合でも問題なく動作するようにシステムをセットアップしています。ただし、彼らのライブラリに接続する場合は、機器の実行速度によって設定された速度で Windows メッセージ ポンプを処理するという暗黙の要件があります。これは、彼らのライブラリが機器の動作を追跡するサブスクライブできるイベント システムを実装しているためですが、アプリケーション コードが WinForms ベースであることを前提としています。(しかし、彼らのドキュメントにはこれを明示的に述べているものは何もありません.2つの.NetサンプルプログラムはすべてWinFormsベースです.)私は彼らの技術サポートに、WinFormsアプリケーションを使用することを期待していることを確認しました.
私の場合、C# の非 WinForms ベースのアプリケーション (実際には Windows サービスであるため、UI スレッドはありません) を作成しており、機器に接続しているにもかかわらず、どのイベントにもサブスクライブしていません。その結果、サブスクライブしていないすべてのイベントを処理するには、WinForms アセンブリを参照し、Application.DoEvents() を十分な速度で呼び出す必要があることがわかりました。
だから私の質問はこれらです:
- この場合、私の唯一のオプションは Application.DoEvents() を呼び出すことですか?
- または、これを行うより現代的な方法はありますか?
- 20mS レートで DoEvents() を呼び出すと、どのような影響がありますか?
- 関係ありませんが、WPF ベースのアプリケーションを作成した場合、そのプログラムはメッセージ ポンプにサービスを提供する可能性がありますか?
編集
機器に接続し、Windows メッセージ ポンプにサービスを提供しない場合 (イベントのいずれにもサブスクライブしていなくても)、機器が予期せぬ動作を開始することを付け加えておきます。
編集 2
また、ライブラリとのインターフェイスに使用するスレッドは、最初の Windows サービス スレッドから約 2 世代または 3 世代分削除されています。