0

私は、メディアライブラリから画像を収集し、各アイテムをリストボックスに追加するWindows Phoneアプリを開発しています.Hereは私のコードです....

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() でメモリ不足の例外が発生します。メモリを解放する方法を教えてください。

4

1 に答える 1

0

Win32 は、無効な画像ファイルに対してメモリ不足の例外をスローする傾向があります。これが WP7 でも当てはまるかどうかはわかりません。

そうではないと仮定しましょう - 例外は単一の特定の画像に対してのみスローされますか? または、すでにいくつかの画像を読み込んでいるときにスローされ、実際の「メモリ不足」の状況になっていますか?

後者の場合: すべての画像をリスト ボックスにロードしたくない場合 - ユーザーは何千もの画像を持つ可能性があります。おそらく、代わりにサムネイルをロードする必要があります。この場合は、GetThumbnail メソッドを呼び出します。また、読み込まれるサムネイルの数を制限するか、(再) 仮想化、遅延読み込み ListBox を使用するか、利用可能な RAM を監視して、それ以上のサムネイルの読み込みを停止する必要があります。

于 2013-08-21T08:57:10.670 に答える