UWP BitmapImage SetSource de MemoryStream trava
No meu aplicativo UWP, eu armazeno imagens em um banco de dados SQLite em forma de byte []. Então, quando recupero meus objetos do banco de dados, vinculo-os a um modelo de dados GridView que possui um controle de imagem. Como não posso vincular a fonte da imagem diretamente à matriz, criei uma propriedade BitmapImage na classe do meu objeto para vincular o controle Image a:
public BitmapImage Icon
{
get
{
using (var stream = new MemoryStream(icon))
{
stream.Seek(0, SeekOrigin.Begin);
var img = new BitmapImage();
img.SetSource(stream.AsRandomAccessStream());
return img;
}
}
}
O problema é que meu aplicativo trava na linha img.SetSource. Após algumas experiências, descobri que esse problema pode ser superado com um segundo MemoryStream:
public BitmapImage Icon
{
get
{
using (var stream = new MemoryStream(icon))
{
stream.Seek(0, SeekOrigin.Begin);
var s2 = new MemoryStream();
stream.CopyTo(s2);
s2.Position = 0;
var img = new BitmapImage();
img.SetSource(s2.AsRandomAccessStream());
s2.Dispose();
return img;
}
}
}
Por alguma razão, funciona, não trava. Eu quero saber porque? E como lidar com essa situação corretamente? Obrigado!