私はこれが他の質問で議論されていることを理解していますが、私はここで私の髪を引っ張っています-明らかに何か明らかなものが欠けています。私はあなたにいくつかの背景情報を提供しようとしますので、ここに行きます...
UIスレッドがフリーズしていたので、UIをインタラクティブに保つために、すべての重い処理を行うバックグラウンドワーカーを作成しました。
いくつかの円弧/パスの座標を生成し、それをキャンバスに描画する必要があります。バックグラウンドワーカーは、PathGeometryを他のデータとともにリストに格納する、作業完了メソッドを処理して実行します。次に、backgroundworkerに渡したオブジェクトを使用して、backgroundworkerからUIスレッドでupdate()メソッドを呼び出しました。
私の問題は、UIスレッドでPathオブジェクトの作成を開始すると(backgroundworkerスレッドで作成できなくなる)、PathGeometriesにアクセスできないことです。私のオブジェクトはCommunicationArcで、PathGeometry、不透明度、色などを保持しています。
The calling thread cannot access this object because a different thread owns it.
オブジェクトの他の部分にはアクセスできますが、PathGeometryにはアクセスできず、その理由はわかりません。workcompleteメソッドが実行され、アークがすべて私のリストに保存されているので、backgroundworkerは確実に終了しています。UIスレッドでアークを読み取り、それらをもう少し処理して、描画を続けたいだけです。
次のように、UIスレッドからディスパッチャーを使用してみました。
arc.pathGeometry.Dispatcher.BeginInvoke((Action)(() =>
{
MessageBox.Show(arc.pathGeometry.ToString());
}));
しかし、私が行っていることが正しいかどうかはよくわかりません。ディスパッチャーを呼び出すさまざまなメソッドは、何もしないか、BeginInvoke()ですべてをロックします。
どんな助けでも素晴らしいでしょう、私はここで輪になって行くような気がします!