そのため、私はほぼ 1 日中、BitmapImages を ListBox に追加することに取り組んできました。これが私のコードです:
public class SomeClassViewModel : ViewModelBase
{
public SomeClassViewModel(EnhanceImage image)
{
LoadImages();
}
public List<BitmapImage> ListOfImages { get; set; }
public void LoadImages()
{
ListOfImages = new List<BitmapImage>();
DirectoryInfo imageDir = new DirectoryInfo(@"..\..\Images");
foreach (FileInfo imageFile in imageDir.GetFiles("*.jpg"))
{
Uri uri = new Uri(imageFile.FullName);
ListOfImages.Add(new BitmapImage(uri));
}
}
}
ご覧のとおり、"Images" フォルダー内のファイル拡張子 ".jpg" を持つすべての画像を、ListOfImages という BitmapImages のリストに追加しています。その後、次のように XAML の ListBox にバインドします。
<ListBox ItemsSource="{Binding ListOfImages}"/>
問題は、実行すると、「別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」というエラーが表示されることです。この StackOverflow スレッドを見て、何をしなければならないかがわかりました。別のスレッドが所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。画像を編集するにはどうすればよいですか? 、しかし、私はそれに従うことができませんでした。この Dispatcher.Invoke の使い方を教えてもらえますか?
編集: 現在、画像の URI を取得してリストに表示しようとしています。