Отображение каждого изображения из каталога в элементе управления изображениями - PullRequest
1 голос
/ 14 сентября 2011

Я хотел бы отобразить содержимое (файлы .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);
            }

1 Ответ

2 голосов
/ 14 сентября 2011

Загрузите изображения в память, затем используйте фоновый поток, чтобы вращать их с определенной задержкой. Вызов диспетчера необходим для доступа к элементу управления пользовательского интерфейса из фонового потока.

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);
   }
}
...