我正在尝试在我的Windows Phone 8 Silverlight应用中播放Gif。为此我使用Imagetools。除了有时我得到OutOfMemoryException
时,它工作得很好。我正在使用诺基亚Lumia 1020(2 GB RAM,内存使用限制780 MB)进行测试。
我有一个SilverLight ListBox
并且其中有多个模板。其中两个是 -
<local:ModuleTemplateSelector.ImageGif>
<DataTemplate>
<StackPanel Margin="20,10">
<imagetools:AnimatedImage Source="{Binding src, Converter={StaticResource ImageConverter}}"/>
</StackPanel>
</DataTemplate>
</local:ModuleTemplateSelector.ImageGif>
<local:ModuleTemplateSelector.ImageOther>
<DataTemplate>
<Grid Margin="20,10">
<Image Source="{Binding src}"/>
</Grid>
</DataTemplate>
</local:ModuleTemplateSelector.ImageOther>
一个模板用于gifs,另一个模板用于.jpg,.png等。
我使用API获取ListBox中的数据。所以,除了.jpg和.png之外,有时还会有超过两三个GIF,这会导致OutOfMemoryException
。我确信问题出在Imagetools本身的某个地方。
那么我应该如何避免这种异常呢?还有其他方法可以在Windows Phone 8应用程序中玩GIF吗? 感谢。
答案 0 :(得分:0)
检查DeviceStatus.ApplicationMemoryUsageLimit
返回的内容并尝试在运行时使用DeviceStatus.ApplicationCurrentMemoryUsage
监控应用内存使用情况。
但我相信它是已知的ImageTools错误。要在Windows Phone 8 或 8.1 中显示图像,只需使用默认Image
控件。它支持GIF就好了。
编辑: 由于图像控件不支持GIF中的动画,我已经进行了快速搜索 - 您可以尝试使用此修复程序https://imagetools.codeplex.com/workitem/10396进行图像工具:
在构造函数中添加..
this.Unloaded += new RoutedEventHandler(AnimatedImage_Unloaded);
void AnimatedImage_Unloaded(object sender, RoutedEventArgs e)
{
Stop();
}
这将停止计时器并强制控件在不再使用时被卸载。
或者您可以尝试执行类似http://advertboy.wordpress.com/2012/05/08/animated-gifs-in-xamlc/的操作,并自行制作动画。