【发布时间】:2019-07-03 15:31:47
【问题描述】:
我在 WPF 中使用 ListView 来显示一些图像,这是通过使用 Image 对象填充 ObservableCollection 并将该列表设置为 ItemsSource 来完成的。我的实现如下所示:
public partial class MainWindow : Window
{
public ObservableCollection<Image> imageList;
public MainWindow()
{
InitializeComponent();
imageList = new ObservableCollection<Image>();
ImageView.ItemsSource = imageList;
}
private void loadImages(object sender, RoutedEventArgs e)
{
List<string> filePaths = Directory.GetFiles(@"C:\SomeImages")
foreach (string filePath in filePaths)
{
Image image = new Image();
BitmapImage bimage = new BitmapImage();
bimage.BeginInit();
bimage.UriSource = new Uri(filePath, UriKind.Absolute);
bimage.EndInit();
image.Source = bimage;
imageList.Add(image);
}
}
}
我的目的是让 UI 更新一次 foreach 循环的每次迭代,因为可观察列表已填满。然而,在将控制权返回给 UI 之前,foreach 循环会完全填满列表,然后同时显示所有图片。由于大约有 100 张图片,这会使程序滞后几秒钟。
有什么方法可以让程序一次更新 UI 一个元素,并且还可能保持 UI 响应?
【问题讨论】: