当有两个嵌套的using子句时,Microsoft.usage警告

Jas*_*ska 0 c#

我想知道为什么Visual Studio代码分析会用这一小段代码发出警告:

byte[] data = File.ReadAllBytes("myImage.png");
using (MemoryStream mem = new MemoryStream(data))
using (Bitmap bmp = new Bitmap(mem))            
{
     // do something with the bitmap
}
Run Code Online (Sandbox Code Playgroud)

错误是:

对象'mem'可以在方法中多次处理...为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose.

以及如何纠正这个?(是的,我可以直接从文件中加载位图,但在我的真实项目中,我有自己的文件格式,其中多个图像保存到一个文件中,因此我需要MemoryStream从文件中的特定范围加载数据)

Jon*_*eet 6

问题是Bitmap获取它在构造函数中给出的流的所有权.会处理流 - 你不需要.所以你需要的是:

using (Bitmap bmp = new Bitmap(new MemoryStream(data)))            
{
     // do something with the bitmap
}
Run Code Online (Sandbox Code Playgroud)