[英]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.