Я анализирую код с помощью инструмента Visual Studio и получаю следующее сообщение:
Объект 'FileStream' может быть размещен более одного раза в методе 'BitmapFormat.WriteBitmap (byte [], int, int)'. Во избежание генерации исключения System.ObjectDisposedException не следует вызывать метод Dispose для объекта более одного раза.
Я пытался вызвать call явно на объекте, но безрезультатно.
Это метод:
Stream FileStream = null;
try
{
FileStream = File.Open("finger.bmp", FileMode.Create, FileAccess.Write);
BinaryWriter TmpBinaryWriter = new BinaryWriter(FileStream);
TmpBinaryWriter.Write(StructToBytes(BmpHeader, 14));
TmpBinaryWriter.Write(StructToBytes(BmpInfoHeader, Marshal.SizeOf(BmpInfoHeader)));
//µ÷ÊÔ°åÐÅÏ¢
for (ColorIndex = 0; ColorIndex < m_nColorTableEntries; ColorIndex++)
{
ColorMask[ColorIndex].redmask = (byte)ColorIndex;
ColorMask[ColorIndex].greenmask = (byte)ColorIndex;
ColorMask[ColorIndex].bluemask = (byte)ColorIndex;
ColorMask[ColorIndex].rgbReserved = 0;
TmpBinaryWriter.Write(StructToBytes(ColorMask[ColorIndex], Marshal.SizeOf(ColorMask[ColorIndex])));
}
//ͼƬÐýת£¬½â¾öÖ¸ÎÆͼƬµ¹Á¢µÄÎÊÌâ
RotatePic(buffer, nWidth, nHeight, ref ResBuf);
//дͼƬ
//TmpBinaryWriter.Write(ResBuf);
byte[] filter = null;
if (w - nWidth > 0)
{
filter = new byte[w - nWidth];
}
for (int i = 0; i < nHeight; i++)
{
TmpBinaryWriter.Write(ResBuf, i * nWidth, nWidth);
if (w - nWidth > 0)
{
TmpBinaryWriter.Write(ResBuf, 0, w - nWidth);
}
}
TmpBinaryWriter.Close();
FileStream.Close(); // <----- THE WARNING IS HERE
}
finally
{
if (FileStream != null)
FileStream.Dispose();
}
Если я уберу блок try finally
, произойдет то же самое. Даже если я использую оператор using
.
Как мне этого избежать?