Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。1,152件52現在、WPF+XAML+MVVMでアプリケーションを開発しています。WPFのDataGridコントロールは大量のデータをBindすると描画に時間がかかるという既知の問題(仕様...)があります。そのため、仮想化(VirtualMode)の機能が提供されていますが、ある程度は速くなったものの、それでも画期的に速くはできませんでした。そこで割り切って、DataGridの描画中はインジケーターを表示して、ユーザーに可能な限り遅く見せないような工夫をしようと考えているのですが、UIスレッドがDataGridによって占有されるためか、インジケーターまで固まってしまう問題が発生します。(↑検証用に作ったプログラムを動かしているところ。「実行」ボタンをクリックすると、画面右側のDataGridにBindします。この時、画面左側のインジケーターに見立てたImageコントロールのアニメーションが一瞬固まってしまいます)(↑パフォーマンスプロファイラーの結果もUPします。DataGridのレイアウト処理だけで1秒かかり、UIスレッドが占有されてしまっています)インジケーターを固まらないようにする、良いアイデアはございますでしょうか?UIスレッドを並列化できる方法があれば一番望ましいのですが...サードパーティー製のDataGridを使うという方法もありますが(某C社などは30%速くなるみたいなことを謳っていたりもしますが)、標準のコントロールで済ませたいです。DataGridに大量のデータをBindする行為自体はマストです。データ量を減らせ等の御意見はあるかと思いますが...。ご教示よろしくお願いいたします。8:44コメント有難うございます。アニメーションを止めてしまうのも一つの手ですね。インジケーター=グルグルと動きのあるものをと考えておりましたが、単なる静止画にするのも一つの手ですね。票3全件挿入が終わるまでの時間は伸びてしまいますが、ObservableCollection<>に1件ずつDispatcher.BeginInvokeして追加してみてはどうでしょうか。ボタンのクリック時に以下のようなコードを書いてみます。別スレッドからDispatcher.BeginInvokeで適当なViewModelのObservableCollection<>に追加しています。DispatcherPriority.BackgroundならUIの応答性をそこまで阻害しないかと。等を使えば、コントロールが軽量な分、よりパフォーマンスが向上するのではないでしょうか。個の銅バッジコメント有難うございます。DataGridを辞めてしまうのも一つの解ではありますが、DataGridの利便性は捨てがたく、出来ればDataGridを使いたいと考えています。WPFの仕組み上、一つのUIスレッドを占有してしまうのは仕方がないものなのでしょうか?何か工夫することでUIスレッドを並列処理できる方法(あるいはアイデア)があればよいのですが...。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。