一开始就不要用完所有内存怎么样?
(注意:以下段落和代码转载自此答案。)
部分问题是它正在加载每个中的完整图像。您必须通过在 上设置或属性,使用IValueConverter
以缩略图大小打开每个图像。这是我在我的一个项目中使用的一个例子......DecodePixelWidth
DecodePixelHeight
BitmapImage
class PathToThumbnailConverter : IValueConverter {
public int DecodeWidth {
get;
set;
}
public PathToThumbnailConverter() {
DecodeWidth = 200;
}
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) {
var path = value as string;
if ( !string.IsNullOrEmpty( path ) ) {
FileInfo info = new FileInfo( path );
if ( info.Exists && info.Length > 0 ) {
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.DecodePixelWidth = DecodeWidth;
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.UriSource = new Uri( info.FullName );
bi.EndInit();
return bi;
}
}
return null;
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) {
throw new NotImplementedException();
}
}
您可能还需要考虑IsAsync=True
在Binding
后台线程上调用转换器。