2012-05-03 12 views
0

このように、BitmapImagesをListBoxに追加する作業を、私の仕事全体のほとんどで行っています。ここに私のコードは次のとおりです。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)); 
     } 
    } 
} 

あなたは私がListOfImagesと呼ばれるBitmapImagesのリストにファイル拡張子「.JPG」を持っているフォルダ「イメージ」内のすべての画像を追加している見ることができるように。そして、その後、私はそうのようにXAMLでのListBoxにバインド:

<ListBox ItemsSource="{Binding ListOfImages}"/> 

問題があるが、私はそれを実行したとき、私はこのエラーを取得することです:「別のスレッドが所有しているので、呼び出し元のスレッドがこのオブジェクトにアクセスすることはできませんそれ"。今私はこのStackOverflowスレッドを見てから何をしなければならないかを知っています:The calling thread cannot access this object because a different thread owns it.How do i edit the image?しかし、私はそれに従うことができませんでした。誰かが私にこのDispatcher.Invokeの使い方を教えてもらえますか?

EDIT:今は、画像のURIをリストに表示させようとしています。

答えて

0

私はそれを理解し、私は答えを投稿すると思った。ここで

は、私は私のforeachループ内でやったことだ:

Uri uri = new Uri(imageFile.Fullname); 
BitmapImage tmpImage = new BitmapImage(uri) 
tmpImage.Freeze(); 
Action action = delegate { ListOfImages.Add(tmpImage); }; 
Dispatcher dispatcher = Dispatcher.CurrentDispatcher; 
dispatcher.Invoke(action); 

あなたは私がBitmapImageの凍結した後、ListOfImagesへのBitmapImageの追加のアクションを委任されたなかったものを見ることができるように。そして最後に私は行動を起こした。

関連する問題