【发布时间】:2014-03-19 19:00:06
【问题描述】:
当显示超过 13 个(12 个或更少工作正常)大图像 (3264x2448) 缩小为 320x180 图像项时 - GridView 崩溃并出现非托管异常:0x7583A862 (combase.dll) 处的未处理异常。
Xaml:
<GridView x:Name="ImagesGridView" HorizontalAlignment="Stretch" Height="Auto" VerticalAlignment="Stretch" Width="Auto">
<GridView.ItemTemplate>
<DataTemplate>
<Image Stretch="Fill" Source="{Binding Source}" Height="180" Width="320" />
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
加载代码:
private static async Task<BitmapImage> LoadImage(StorageFile file)
{
var bitmapImage = new BitmapImage();
var stream = (FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
bitmapImage.SetSource(stream);
stream.CloneStream();
return bitmapImage;
}
public async void GetPictures()
{
var queryOptions = new QueryOptions(CommonFileQuery.OrderByName, new[] { ".png", ".jpg" });
var picturesQuery = await KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOptions).GetFilesAsync();
foreach (var pictureFile in picturesQuery)
{
var bitmap = await LoadImage(pictureFile);
var img = new Image { Source = bitmap };
ImagesGridView.Items.Add(img);
}
}
崩溃不是在加载图像时发生,而是在加载成功后,应用程序应该在 GridView 中显示图像。此外,我使用相同图像的副本来确保所有图像都是相同的。
对我来说,在应用程序中加载大图像似乎很常见,所以也许我在这里做错了什么?
【问题讨论】:
标签: c# xaml gridview windows-runtime