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