私はwpfアプリケーションで作業しています。 FlowDocumentオブジェクトを作成して印刷したいと思います。作成に数秒かかり、UIがフリーズするので、コードを新しいスレッドに移動します。問題は、FlowDocumentにImageを設定し、Image UIElementを作成する必要がありますが、UIコントロールをバックグラウンドスレッドで作成できないことです。 私はDispather.Invoke()シナリオも非常に多く試しましたが、オブジェクト所有者スレッドに関する例外を検出します。FlowDocumentに画像を挿入する
FlowDocumentに画像を挿入する他の方法はありますか?または、バックグラウンドスレッドでイメージUIElementを作成することは可能ですか?
何か提案がありがとうございます。
P.S:いくつかのサンプルコード=>
BitmapImage bitmapImage = SingletonSetting.GetInstance().Logo;
Image v = new Image() { Source = bitmapImage };
currnetrow.Cells.Add(new TableCell(new BlockUIContainer(v)));
Image v = ((App)Application.Current).Dispatcher.Invoke(new Func<Image>(() =>
{
BitmapImage bitmapImage = SingletonSetting.GetInstance().Logo;
return new Image() { Source = bitmapImage};
}));
currnetrow.Cells.Add(new TableCell(new BlockUIContainer(v)));
おかげで、それは最後の行に例外が発生します。 「呼び出しスレッドは、別のスレッドが所有しているためこのオブジェクトにアクセスできません」と言う。 – Evil
currnetrow.Cells ...行? currnetrowはどのスレッドで作成されましたか? –
はい、バックグラウンドスレッドで作成します。私は、UIスレッドでcurrentrowを使うのが問題だと思います! – Evil