簡體   English   中英

嘗試未處理的異常-捕獲塊

[英]Unhandled Exception from Try - Catch Block

我已經看過與該問題有關的其他問題,但沒有找到對我有幫助的答案(或者可能對我有所了解)。

這段代碼:

   public static Bitmap GetLibraryObjectImage(Guid guid) {
            try {
                string tempPath = GetLibraryObjectImagePath(guid);
                if (tempPath != string.Empty) {
                    var bytes = File.ReadAllBytes(tempPath);
                    var ms = new MemoryStream(bytes);
                    return (Bitmap)Image.FromStream(ms);
                }
            }
            catch {
                return (Bitmap)Image.FromFile(Application.StartupPath + @"\na.bmp");
            }

            return (Bitmap)Image.FromFile(Application.StartupPath + @"\na.bmp");
        }

用於處理找不到圖像文件或以其他某種方式無效的任何情況。 我尚未確定任何特定的異常類型,以希望它能捕獲任何東西。

對於我的一位用戶,它引發了以下異常:

無效的參數。
在System.Drawing.Image.FromStream(Stream stream,布爾useEmbeddedColorManagement,布爾validateImageData)在System.Drawing.Image.FromStream(Stream stream)
在ScruffyDuck.AirportDesignEditor.Helpers.U.GetLibraryObjectImage(Guid guid)

在處理圖像的try-catch塊中的其他情況下,我之前已經看到過。 我以為上面的try-catch可以獲取所有信息,包括非托管異常,但也許我錯了。

我不知道導致異常的情況,但是我真的不希望我的應用崩潰並燃燒,即使我試圖解決問題。 它被我的全局異常處理程序捕獲了,但是到那時當然已經有點晚了。

非常感謝您對避免這種情況的見解

正如注釋中提到的@KeithS一樣,堆棧跟蹤顯示該異常源自Image.FromStream方法。 您是否已驗證導致該調用的所有代碼均正確返回了預期的數據? 文件路徑必須存在(否則File.ReadAllBytes將引發異常)並且MemoryStream構造函數將返回有效流(否則將引發異常),但是內存流中的數據實際上可能不是一個圖像?

另外,您可能想嘗試使用File.OpenRead方法。 這將返回FileStream因此您可以將其直接傳遞給Image.FromStream方法。 這看起來類似於以下代碼。 (我將其更改為使用using語句,並且只有一個return語句。)

public static Bitmap GetLibraryObjectImage(Guid guid) 
{ 
   Bitmap bitmap = null;

   try
   { 
      string tempPath = GetLibraryObjectImagePath(guid); 
      if (!String.IsNullOrEmpty(tempPath) 
      {
         using (var stream = File.OpenRead(tempPath))
         {
            bitmap = (Bitmap)Image.FromStream(stream);
         }
      } 
   } 
   catch
   { 
      bitmap = (Bitmap)Image.FromFile(Application.StartupPath + @"\na.bmp"); 
   }

   if (bitmap == null)
   {
      bitmap = (Bitmap)Image.FromFile(Application.StartupPath + @"\na.bmp"); 
   }

   return bitmap;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM