私はC#でSierpinskiの三角形をゆっくり描くスクリーンセーバーを書いています。私は再帰関数内でThread.Sleep
を使用して描画を減速させます。しかし、マウスの移動やキーの押下などでユーザーが終了できるようにする方法が必要です。フォームのPaint
イベントハンドラ内から描画関数が呼び出されるので、マウスイベントとキーボードイベントは、全体の三角形がそれはかなりの時間がかかることがあります。どのように再帰関数が実行されている間、イベントを処理するようにフォームを強制することができますか? (ペイントイベントなどを呼び出すイベント処理を強制する描画関数を呼び出すペイントイベントを呼び出すことによる無限ループを回避する方法)再帰関数の内部でイベント処理を強制する方法はありますか?
3
A
答えて
4
あなたはです。を使用してください。Application.DoEvents
- しかし、私はそれを助言するとは確信していません。再突入問題、特にPaint
イベントで簡単に終わることができます。
Paint
イベントを処理している場合は、本当にUIスレッド上で実際に作業が必要なように聞こえるのですか?
Paint
イベントハンドラを使用する代わりに、Bitmap
を作成して描画する方法もあります。これは、バックグラウンドスレッドで行うことができます。定期的に新しいイメージを作成し、これまでに描画したイメージをコピーし、次のレイヤーを描画してから、UIスレッドをマーシャリングしてUIでイメージを使用します。これにより、メインのUIスレッドはイベント処理のために自由になります。 Paint
イベントを処理する必要はありません。「これまでのイメージ」を表示するために使用するのはPictureBox
です。メモリの問題を避けるために、古いビットマップの処理が終わったらそれを廃棄することを忘れないでください。
2
いつでも計算/描画できるバックバッファービットマップを使用できますPaint
イベントに表示するだけです。計算は別のスレッドで行うことができます。
関連する問題
- 1. NSRunloopsと強制イベント処理
- 2. Z3で再帰関数を処理するには?
- 3. 再帰関数を停止する方法はありますか?
- 4. WPFにコントロールの再検証を強制する方法はありますか?
- 5. そのチェックボックスでのみイベントを処理する方法はありますか?
- 6. 関数内にあるjavascript関数の外部にある変数を返す方法はありますか?
- 7. Javaで再帰クローズアクションを処理する方法は?
- 8. 関数がPythonで再帰的であるかどうかを調べる方法はありますか?
- 9. 再帰関数内で 'どちらか'を使用したエラー処理
- 10. javascriptで関数の再帰呼び出しで同じ変数にアクセスする方法はありますか?
- 11. モデルクラス内の外部キー関係を処理する方法
- 12. アクションをモーションイベントに強制する方法はありますか?
- 13. Scala内部関数を非末尾再帰関数内で使用すると効率が低下することはありますか?
- 14. 内部でイベントを強制的に実行する
- 15. スレッドを停止し、UIイベントを処理させ、スレッドを「再起動」する方法はありますか?
- 16. Uncrustifyで関数間の空白行を強制する方法はありますか?
- 17. テンプレートパラメータの子X制限を強制する方法はありますか?
- 18. 内部関数を呼び出す方法はありますか
- 19. イベントハンドラ内で強制的にコントロールコンテンツを再描画する方法
- 20. Pythonでこの再帰関数を反復する方法は?
- 21. Global.asaxの外部でSession.Endイベントを処理する方法
- 22. TCOを実装する言語で末尾再帰の再帰深度に制限はありますか?
- 23. 再帰関数からデータを取得する方法は?
- 24. バイナリツリーで次の再帰関数を理解するには?
- 25. PHPで内部処理エンコーディングをUTF8に変更する方法はありますか?
- 26. フローチャートで再帰関数を表現する方法は?
- 27. 内部での.clickイベントによるライブクリックバインド。再帰の防止
- 28. 一般的な再帰関数の処理
- 29. RestAssuredでフィルタの順序を強制する方法はありますか?
- 30. RESTサービスでリクエストの発信を強制する方法はありますか
ワーカーアプローチの場合+1。私はDoEventsを使用しないようにJonのアドバイスを2回目 –