【问题标题】:Displaying each image from a directory in an Image Control显示图像控件中目录中的每个图像
【发布时间】:2011-11-17 06:22:57
【问题描述】:

我想在 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);
            }

【问题讨论】:

  • 您需要什么帮助?

标签: c# wpf image wpf-controls


【解决方案1】:

将图像加载到内存中,然后使用后台线程以定义的延迟旋转它们。需要调度程序调用才能从后台线程访问 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);
   }
}

【讨论】:

  • 是的,我们可以使用DispatcherTimer。另外为什么要让它在流中加载?不能将带有 IsAsyncBindingSource 属性作为真正的工作?
  • @AngleWPF,我个人更喜欢加载集合中的所有图像,所以我知道我有多少图像。也许我需要那个数字来显示旋转的进度,比如图片 1 of 6 等。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2017-02-18
  • 2014-10-21
  • 2013-02-24
相关资源
最近更新 更多