質問: new treenode( 子ノード名); parentnode.nodes.add( childnode ); } this.nodes.add( parentnode ); } resumelayout(); endupdate(); } } この方法ですと、かなり時間がかかってしまい、uiが固まったようになってしまいます。 (treeviewに、子ノードの一斉展開機能が必要なので、親ノード展開時のイベントを拾って 子ノードを追加する方法は上記と同じく遅くなってしまうのではと思っていますがどうなんでしょうか?)
回答: 今試せる環境がないので半分くらい無責任発言なんですが、一応案として、何かの参考になれば。 ・効率が良くなるかもしれない方法 treenodeを配列化してaddrangeする(addを使わず配列で渡す) ※配列はlistではなくtreenode[]でnew ・追加時間を短縮する方法 system.threading.tasks.parallelを使って並列実行する ぱっと見、1つの「親ノード情報」に対する子は予め決まってそうなので、「親ノード情報」単位で並列化が可能にみえます。ノード間で何かしら依存する場合はたぶん無理です。 ・ノード追加処理を非同期化させるか、メッセージ処理をはさむ uiが固まるのは、処理が重いからというより、ウインドウが長時間メッセージを処理できなくなるからです。 なので、たとえば何階層か展開する毎にメッセージ処理を挟めばuiが止まることはなくなります(処理中にウインドウが操作を受け付けるようになるので別の問題起き得ます)。