0

フロードキュメントを処理するバックグラウンドワーカーを作成しようとしています。スレッド検証のため、flowdocumentオブジェクトのプロパティにアクセスできません。ドキュメントをシリアル化してワーカースレッドにロードしようとしましたが、実際にスレッドの検証の問題が解決しました。ただし、処理が完了したら、TextPointerオブジェクトなども使用する必要があります。これらのオブジェクトは、元のオブジェクトではなく、コピー内のオブジェクトを指すようになりました。

誰かがWPFでそのようなバックグラウンド処理にアプローチするための最良の方法を提案できますか?

4

1 に答える 1

1

できません.WPFオブジェクトは、それらを作成したスレッドからのみアクセスできるため、定義により、それらに対してバックグラウンド処理を行うことはできません.

しかし、すでに発見したように、シリアライゼーション手法を使用して別のスレッドでコピーを作成し、結果をシリアライズして戻すことができます。

XamlWriter/XamlReader は、ほぼすべての WPF オブジェクトをシリアル化できますが、大きなオブジェクト グラフでは遅くなる可能性があります。

また、TextPointer の場合は、GetOffsetToPosition/GetPositionAtOffset を使用して、メイン スレッドで同等の TextPointer を再作成できます。

もう 1 つのオプションは、freezables を使用することです。Freezeable を継承するオブジェクトは (Freeze メソッドが呼び出された後) 他のスレッドから使​​用できます。ドキュメントはフリーズ可能ではありませんが、描画とジオメトリはフリーズ可能です。したがって、スレッド間でドキュメントの「フラグメント」を転送できる場合があります。図面として。

于 2010-07-20T11:05:24.723 に答える