1

私のWindowsフォームアプリケーションには、ジョイスティックデバイスの値を継続的にポーリングし、それらの値でGUIを継続的に更新してからGUIを更新するwhileループがあります。ただし、while ループにいる限り、UI はどの操作にも応答しません。

while ループ中にボタンのクリックやキーの押下などの GUI イベントやインタラクションを照会する方法はありますか?

特定のイベントや相互作用が発生する場合、ループを終了できるようにしたいと考えています。少なくとも、閉じるボタンと最小化ボタンが機能するようにしたいです。

ジョイスティックをポーリングして GUI を更新する必要があるのは 1 秒間に 20 回だけなので、ループ時間の大部分は単なるスリープ時間です。でも、この時期のイベントや交流を待ちたいと思います。

4

2 に答える 2

0

私はこの問題を予想よりもはるかに簡単に解決しました。基本的に、GUIアプリケーションのwhileループは悪い考えのようです。whileループを使用して別のスレッドからGUIを更新しようとすると、機能しないか、プログラミングの習慣が悪くなります。

whileループを使用して関数を無期限に継続的に呼び出す代わりに、50ミリ秒ごとにジョイスティックをポーリングする関数をトリガーするタイマーを使用します。これは、残りの時間、GUIが自由に自分自身を更新できることを意味します。強制的に更新したり、ユーザーの操作を照会したりする必要はありません。関数はごく短時間しか実行されないため、GUIには十分な時間があり、対話やイベントが失われることはありません。

要約すると、タイマー駆動の関数呼び出しは、whileループの代わりに役立ち、GUIアプリケーションでのマルチスレッドの悪夢からあなたを救うことができます。

于 2012-12-30T07:44:17.087 に答える
0

ゲームコントローラーを使用していますか?もしそうなら、そこからどのようにインプットを得るのですか?

通常の Windows 入力 (マウスとキーボード) では、オーバーライドされた OnXxx メソッドが呼び出されます (または対応するイベントが呼び出されます)。

明らかに、UI を停止させずにブロッキングまたは長時間実行される操作を実行する通常の方法は、操作を別のスレッドで実行することです。ただし、デバイスから入力を取得する方法によって異なります。

于 2012-12-29T10:41:32.713 に答える