現在、多くの異なるファイルからのデータのレンダリングが必要なWPF(C#の裏側)システムで作業しています。これらのファイルのほとんどはAutoCADドキュメントです。各ファイルには、基本的に同じキャンバス上に描画する必要がある一連のデータが用意されています。各ファイルは、画面に表示する必要がある潜在的な「レイヤー」またはオーバーレイと考えてください。異なるスレッドでのパスの作成と同じキャンバスへのレンダリング
現時点では、各グラフィックスソースは解析され、Pathオブジェクトのセットに変換されます。パスの各コレクションは、自身のCanvasにレンダリングされ、可視性をオンまたはオフに切り替えることができます。これらのキャンバスはそれぞれ親キャンバスの子になり、そのキャンバスには一連の変換が適用されます。これらの変換は基本的なスケールであり、変換されたレンダリング変換は表示されている画像のパンおよびズームをサポートするために使用されます。
この機能は現在問題なく動作していますが、遅いです。私たちは画面上にかなりの数のPathオブジェクトをレンダリングしており、それらのPathインスタンスのロード/作成にはかなりの時間がかかります。
ロードスピード自体はそれほど問題ではありません。実際に問題があるのは、UIスレッドでPathインスタンスを作成する必要があるということです。そうしないと、すべて同じキャンバスにレンダリングできません。したがって、読み込み中にのUI全体がロックされてとなり、ユーザーは何もできません。
私はウェブ上で広範に検索しましたが、問題の解決策を見つけることができませんでした。同じ記事の別のスレッドで作成されたアイテムをホストする方法を記述した記事(残念ながら私はもうリンクがありません)につきました。ウィンドウ。これは私のためには全く役に立たなかった。私は記事で見つけたものの組み合わせを試しましたが、レンダリングするためのものは何も得られませんでした。
私の質問の要点は、UIオブジェクトのセット、特にパスオブジェクトを別のスレッドに作成し、メインUIスレッドの親キャンバスにロードしてそれらをすべて持たせることができるかどうかです一緒にきれいに遊ぶ?すべての参考文献、記事またはチュートリアルは非常に高く評価されます。
私はあなたの助けを楽しみにしています!読んでくれてありがとう。
OJ
編集1:パスの各インスタンスには、カラーで1行だけです。彼らは複雑ではありません。しかし、それらのオブジェクトの作成自体は、時間を取っていることです(私は間違っているかもしれません)。ありがとう!
要するに、バックグラウンドスレッドの要素を私が望むように作成することができません。しかし、私は他の種類の要素を作成し、それらをフリーズし、それらをメインのUIスレッドで利用することができます。それは完璧な解決策ではありませんが、私はそれを行う他の方法を見ることはできません。誰にも感謝してくれました。 –