我正在开发一个Windows手机应用程序,我从媒体库中收集图像并将每个项目添加到列表框中。这是我的代码....
public MainPage()
{
InitializeComponent();
getImages();
}
public void getImages()
{
try
{
MediaLibrary mediaLibrary = new MediaLibrary();
var pictures = mediaLibrary.Pictures;
foreach (var picture in pictures)
{
BitmapImage image = new BitmapImage();
image.SetSource(picture.GetImage());//out of memory exception
img mediaImage = new img();
mediaImage.Imgs = image;
imageList.Items.Add(mediaImage);
}
}
catch (Exception ex)
{
}
}
public class img
{
public img()
{ }
public BitmapImage Imgs { get; set; }
}
在Xaml ......
<ScrollViewer Name="sc" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden" Margin="0,422,0,43">
<ListBox Name="imageList" SelectionChanged="imageList_SelectionChanged_1" Height="126">
<ListBox.ItemsPanel>
<ItemsPanelTemplate >
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal">
<Image Margin="10" Name="image1" Source="{Binding Imgs}" Height="150" Width="150"></Image>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
当我加载此列表框时,我在Picture.GetImage()中出现内存不足异常 我已经用代码编写了。请告诉我如何释放内存。
答案 0 :(得分:0)
Win32往往会丢失无效图像文件的内存异常。不确定WP7是否仍然如此。
所以让我们假设情况并非如此 - 仅针对单个特定图像抛出异常?或者当你已经加载了一些图像时,它会被抛出,使它成为真正的“内存不足”状态?
如果是后者:您不想将所有图像加载到列表框中 - 用户可能有数千张图片。您可能希望加载缩略图 - 在这种情况下,您可以调用GetThumbnail方法。您还应该限制加载的缩略图的数量和/或使用(重新)虚拟化,延迟加载ListBox和/或观察可用的RAM以停止加载更多缩略图。