2011-09-14 6 views
1

Imageコントロールのローカルディレクトリから内容(.jpgファイル)を表示したいとします。画像は5秒の遅れで置き換えなければならない。イメージコントロールのディレクトリから各イメージを表示する

DirectoryInfo dir = new DirectoryInfo(@"D:\somedir"); 
      FileInfo[] files = dir.GetFiles(); 

      foreach (var item in files) 
      { 
       imgBox.Source = (ImageSource)new ImageSourceConverter().ConvertFromString(item.FullName); 
      } 
+0

何を手助けする必要がありますか? –

答えて

2

イメージをメモリにロードし、定義された遅延でそれらを回転させるバックグラウンドスレッドを使用します。バックグラウンドスレッドからUIコントロールにアクセスするには、ディスパッチャコールが必要です。

List<Image> images; 

void GetImagesIntoAList() 
{ 
    List<Image> images = new List<Image>(); 

    DirectoryInfo dir = new DirectoryInfo(@"D:\somedir"); 
       FileInfo[] files = dir.GetFiles(); 

       foreach (var item in files) 
       {       
        FileStream stream = new FileStream(item.FullName, FileMode.Open, FileAccess.Read); 
        Image i = new Image(); 
        BitmapImage src = new BitmapImage(); 
        src.BeginInit(); 
        src.StreamSource = stream; 
        src.EndInit(); 
        i.Source = src; 
        images.Add(i); 
       } 

    Thread rotator = new Thread(rotate); 
    rotator.Start(); 
} 

void rotate() 
{ 
    foreach(var img in images) 
    { 
     Dispatcher.BeginInvoke(() => 
     { 
     nameOfImageControlOnAWindow.Source = img; 

     } 
    ); 

     Thread.Sleep(5000); 
    } 
} 
+1

これはUIThreadでスリープを実行します... –

+0

代わりに 'DispatcherTimer'を使用できます。また、それをストリームにロードするのはなぜですか? 'IsAsync'を真の仕事として' Source'プロパティに 'Binding'をバインドしますか? –

+0

@ H.B。、正しい、私は答えを修正しました。 –

関連する問題