Tôi đang cố gắng sử dụng Caching Application Block để cache một số hình ảnh (những hình ảnh này mất nhiều thời gian để render)không thể truy cập Closed Suối
BitmapSource bitmapSource; ///some bitmap source already created
_cache /// Caching Application Block
String someId; //id for this image, used as the key for the cache
using (var stream = new MemoryStream())
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Interlace = PngInterlaceOption.On;
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(stream);
_cache.Add(someId, stream);
}
Và sau đó tải chúng bằng:
imStream = (Stream)_cache.GetData(someId));
if (imStream != null)
{
PngBitmapDecoder decoder = new PngBitmapDecoder(imStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
return decoder.Frames[0]; //return the bitmap source
}
Nhưng trong khi tải, tôi nhận được ngoại lệ sau tại dòng "mới PngBitmapDecoder":
"Không thể truy cập vào Luồng đã đóng.
Tôi hiểu rằng tôi đã đóng luồng trong mã ở trên, nhưng không phải là _cache.Add() tạo bản sao (qua Serialization) trước khi thoát? Quy trình tuần tự hóa luồng chính xác là gì?
THanks!
cảm ơn! cả hai câu trả lời hay, tôi chỉ đánh dấu câu trả lời đầu tiên :) tôi thích tham chiếu lưu trữ/nhóm. – moogs
@moogs - thực ra cái này xuất hiện đầu tiên (04:55:29 và 04:46:05). – Alconja
đó là lạ ... các "trả lời xx phút trước" là cao hơn cho bài đăng này trước đó. hmm. – moogs