2008-09-25 24 views
5

Tôi đang gọi một số mã sử dụng lớp BitmapData từ .NET. Tôi đã đạt được điều gì đó mà tôi không thể tìm thấy câu trả lời dứt khoát trên Googlespace.unlockbits, lockbits và try-finally

Bởi vì có vẻ như LockBits và UnlockBits luôn phải được gọi trong một cặp, tôi đang sử dụng này:

  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); 
     } 

(Tôi vừa mới được chơi đùa với những bằng tuyên bố, mà là rất hữu ích trong việc C#, đã cho tôi ý tưởng rằng tôi nên làm điều này.) Khó khăn là, ngay cả tài liệu của MS (http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.unlockbits.aspx) không thấy nó phù hợp để sử dụng mẫu thử cuối cùng.

Có phải là cố gắng cuối cùng cần thiết hay không?

Cập nhật: Tôi có thể kết thúc việc bắt và sửa lại ngoại lệ, vì tôi không biết nó có thể là gì và không bắt chúng sớm hơn.

Cảm ơn!

Trả lời

7

Mẫu thử cuối cùng là chính xác. Vì đây là mã bên ngoài, bạn không thể kiểm soát những ngoại lệ nào được ném và mã dọn dẹp UnlockBits cần phải được thực hiện bất kể lỗi nào đã xảy ra.

0

Bạn có mong đợi một số loại ngoại lệ được ném không? Nếu bạn đang có, bạn có thể bắt nó? Nếu không, thì tôi không thấy điểm thử/cuối cùng.

Cũng có những triết lý khác nhau về ngoại lệ. Cá nhân, tôi nghĩ về chúng như là "đặc biệt" - giống như sức mạnh đi ra khi tập tin cuối cùng của bạn đã diễn ra, do đó, tập tin serialized của bạn ngắn hơn bạn mong đợi. Tôi không chắc loại tình huống đặc biệt nào có thể xảy ra khi bạn thao tác các bit như thế này. Nếu bạn đi ra khỏi phần cuối của mảng, đó không phải là ngoại lệ, điều đó chỉ có nghĩa là bạn cần phải thắt chặt kiểm tra giới hạn của bạn.

+0

Một điểm tốt, tại đây. Mã không phải là của chúng tôi; nó thuộc về một thư viện độc quyền mà chúng tôi làm việc cùng. – Chris

1

Ngay cả khi bạn bắt ngoại lệ, việc sử dụng cuối cùng có nghĩa là bạn không sao chép cuộc gọi UnlockBits, đây là một dấu cộng trong tùy chọn của tôi.

Các vấn đề liên quan