0

我正在开发一个 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; }
}

在 Xml...

<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() 中出现内存不足异常,我已用代码编写。请告诉我如何释放内存。

4

1 回答 1

0

Win32 倾向于抛出无效图像文件的内存不足异常。不确定这是否仍然适用于 WP7。

所以让我们假设情况并非如此 - 是否仅针对单个特定图像引发异常?还是在您已经加载了一些图像时抛出,使其成为真正的“内存不足”情况?

如果是后者:您不想将所有图像加载到列表框中 - 用户可能拥有数千张图片。您可能想要加载缩略图 - 在这种情况下,您调用 GetThumbnail 方法。您还应该限制加载的缩略图的数量和/或使用(重新)虚拟化、延迟加载的 ListBox 和/或查看可用 RAM 以停止加载更多缩略图。

于 2013-08-21T08:57:10.670 回答