为了账号安全,请及时绑定邮箱和手机立即绑定

如何摆脱“对象'对象'可以在方法中多次处理”

如何摆脱“对象'对象'可以在方法中多次处理”

C#
潇潇雨雨 2022-07-23 09:34:29
我正在使用 Visual Studio 工具分析代码,并收到以下消息:对象 'FileStream' 可以在方法 'BitmapFormat.WriteBitmap(byte[], int, int)' 中多次处理。为避免生成 System.ObjectDisposedException,您不应在一个对象上多次调用 Dispose。我试图在对象上显式调用dispose,但无济于事。这是方法: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声明。我怎样才能避免它?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

这可能会发生,因为您可能尝试执行

FileStream.Close(), 和

FileStream.Dispose()

在您的情况下使用 Dispose 没有意义,您可以使用 Close 方法。close 方法将使用 'true' 值执行 Dispose 方法。

请观看“FileStream.Close()”方法的这个解释:

https://msdn.microsoft.com/en-us/library/aa328800(v=vs.71).aspx

Close 的此实现调用 Dispose 方法并传递一个真值。


查看完整回答
反对 回复 2022-07-23
?
浮云间

TA贡献1829条经验 获得超4个赞

在 a 的特定情况下FileStream,您不需要将其处置来关闭文件,您只需要使用 Close 方法。



查看完整回答
反对 回复 2022-07-23
?
侃侃无极

TA贡献2051条经验 获得超10个赞

尝试摆脱这条线。您在 finally 块中调用 dispose ,该块将始终运行。所以你可以删除这一行。



查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信