WPFアプリケーションに問題があります。グリッドビューの画像フィールドを、ビューモデルのimageプロパティとデータバインドしようとしています。
<DataGridTemplateColumn Header="Image" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Path=Image, IsAsync=True}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
IsAsyncを使用しなくても、これは問題ありません。ただし、ロードする画像が多く、Webサービスからロードする必要があるため、非同期で実行したいと思います。
Imageプロパティのコードはこれです。これは、Webサービスを呼び出すハンドラーdllを呼び出すだけです。
public BitmapSource Image
{
get { return image ?? (image = ImageHandler.GetDefaultImages(new[] {ItemNumber},160,160)[0].BitmapSource()); }
}
ただし、IsAsync = trueを追加するとすぐに、フォームが読み込まれると、次の例外が発生します。
The calling thread cannot access this object because a different thread owns it.
私はWPFにまったく慣れていません。非同期がtrueに設定されている場合、WPFはスレッド自体を処理すると思いました。データバインディングで、どういうわけか呼び出す必要がありますか?もしそうなら、一体どうやってこれを行うのですか?