で、 (SQL CE イメージ) をValueConverter
に変換しようとしていました。この方法は機能します (画像はフォームに正しく表示されます):System.Data.Linq.Binary
BitmapImage
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture) {
Binary binary = value as Binary;
if (binary != null) {
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = new MemoryStream(binary.ToArray());
bitmap.EndInit();
return bitmap;
}
return null;
}
このメソッドは機能しません(ただし、奇妙なことに、例外はスローされません)。
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture) {
Binary binary = value as Binary;
if (binary != null) {
using (var stream = new MemoryStream(binary.ToArray())) {
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.EndInit();
return bitmap;
}
}
return null;
}
優れたプログラミングの実践では、作成したストリームはすべて破棄する必要があると述べられています...そのため、2番目の方法が機能しないのに最初の方法は機能する理由がわかりません。洞察はありますか?