标签: caching-application-block

无法访问封闭流

我正在尝试使用缓存应用程序块来缓存一些图像(这些图像需要很长时间才能渲染)

  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);
    }
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法加载它们

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
}
Run Code Online (Sandbox Code Playgroud)

但在加载过程中,我在"新的PngBitmapDecoder"行中得到以下异常:

"无法访问封闭的流.

我理解我在上面的代码中关闭了流,但是在退出之前是不是_cache.Add()制作副本(通过序列化)?序列化流的正确过程是什么?

谢谢!

.net c# serialization caching-application-block

10
推荐指数
2
解决办法
2万
查看次数