非常に短い話ですが、私はWinFormsパネルとそれを別のスレッドで描画するアンマネージドクラスのインスタンスを配置する必要があります。 SDKは、何を描画するかを考え出すのに数秒かかることがありますが、これを実行している間にUIスレッドがブロックされます)。私は実際にこれらの多く(32まで)が必要ですが、私たちは今のところただ一つ話します。そのコンセプトは、必要な回数だけ複製することができなければなりません。フォームのネストされたコントロールの複数のメッセージループを作成する
私がする必要があると思うのは、新しいスレッドを開始してPanelを「新規作成」し、特に何かに縛られていないApplicationContextを開始し、パネルに割り当てることです。次に、Panelクラスには、ApplicationContextを終了させ、メッセージポンプをシャットダウンし、スレッドを終了させるDispose()オーバーロードが必要です。私が知っている必要があり何
は次のとおりです。
- パネルはいるIContainer内部に配置された、または任意の親オブジェクトのControlsコレクションに追加することはできますか?または、スレッドセーフでない呼び出しが行われる原因になりますか?
- 新しいスレッドで新しいインスタンスを作成するクラスには、静的なファクトリメソッドがあります。メソッドからバックグラウンドスレッドで作成されたPanelへの参照を返す必要があるので、私はそれを扱うことができます。バックグラウンドスレッドによって設定される静的メソッドでローカルに定義された変数のwhile/sleepループで待機するよりも良い方法がありますか?
- Panelを所有するスレッドへの参照を保持する必要がありますか?
- 私はこれを試してみるのは難しいですか?
+1:これは「オフスクリーン合成」と呼ばれます。ほとんどのアプリケーションで使用され、UIの応答性とちらつきのないようにしながら、画像を読み込むのに時間がかかります。これには、ゲームエンジンからブラウザまでのすべてが含まれます。 – NotMe
良いアイデア。しかし、私はその贅沢はないと思う。 SDKはHWndが引き寄せられることを期待しているので、私はWindowsに知られているGUI要素を与える必要があると確信しています。 – KeithS