解锁位、锁定位和 try-finally

2024-04-09

我正在调用一些使用 .NET 中的 BitmapData 类的代码。我遇到了一些问题,但在 Googlespace 上找不到明确的答案。

因为看起来 LockBits 和 UnlockBits 必须总是成对调用,所以我使用这个:

         System.Drawing.Imaging.BitmapData tempImageData = tempImage.LockBits(
            new System.Drawing.Rectangle(0, 0, tempImage.Width, tempImage.Height),
            System.Drawing.Imaging.ImageLockMode.ReadOnly, tempImage.PixelFormat);
         try
         {
            //use external library on the data
         }//Exception not handled here; throw to calling method
         finally
         {
            tempImage.UnlockBits(tempImageData);
         }

(我最近一直在使用 using 语句,这在 C# 中非常有用,这让我想到我应该这样做。)问题是,即使是 MS 自己的文档 (http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.unlockbits.aspx http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.unlockbits.aspx) 认为不适合使用 try-finally 模式。

try-finally 是必要的还是无偿的?

更新:我最终可能会捕获并重新抛出异常,因为我不知道它可能是什么并且没有更早地捕获它们。

Thanks!


try-finally 模式是正确的。由于这是外部代码,因此您无法控制抛出哪些异常,并且无论发生什么错误都需要执行 UnlockBits 清理代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解锁位、锁定位和 try-finally 的相关文章

随机推荐