我想知道为什么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从文件中的特定范围加载数据)
问题是Bitmap获取它在构造函数中给出的流的所有权.它会处理流 - 你不需要.所以你需要的是:
using (Bitmap bmp = new Bitmap(new MemoryStream(data)))
{
// do something with the bitmap
}
Run Code Online (Sandbox Code Playgroud)