1

私は C# を使用して Win Forms でマルチスレッドを学習しています。ソースによると、これを達成するための最良の方法は、ワーカー スレッドからメイン メソッドを呼び出すことです。

重い処理を実行する必要があり、その後 GUI が更新される場合、これはすべてうまく機能します。

ただし、パネル内に多くのコントロールをプログラムで追加する必要があるシナリオがあります。これは数千に達する場合があります (パネルはスクロール可能になります)。したがって、コントロールは最終的にメイン スレッドによって追加されるため、プログラムはこれが完了するまでハングします。

これを回避する方法はありますか?または、多くのコントロールを同時にインスタンス化する必要のない他のコントロールを試して使用する必要があります (これは明らかに少し重いため)。

基本的に、このパネルにはアイコンと一緒にリストが含まれています (状態によって異なります)。したがって、理想的な方法かどうかわからないすべてのエントリのラベルを作成しています。

ところで、私は Web アプリケーション開発部門から来ました..NET の div に似たコントロールはありますか? リッチ テキスト ボックスを確認しましたが、簡単に画像を追加できるようには見えません。

前もって感謝します。

4

1 に答える 1

0

何千ものコントロールはもちろん、何百ものコントロールを追加する正当な理由があるべきではありません。カスタム コントロールが必要で、項目を追加する必要があるようです。

ListBox または ListView コントロールは基本的な項目に対して機能しますが、多くのカスタマイズ機能が必要な場合は、車輪を自分で再発明し、すべてを手動で描画する必要があります。複数選択、スクロール、キーボード ショートカットなどを処理する必要がある場合、それは大変な作業です。

これは、既存の ListBox ロジックを簡単に使用でき、項目の外観や配置方法を自由にカスタマイズできるため、Winforms の代わりに WPF を使用する利点です。

WPF には、アイテムがスクロールされるまで UI オブジェクトを作成しないため、何千ものアイテムでも適切に機能する仮想化パネルの概念があります。

于 2013-10-29T17:00:35.283 に答える