try..except在嘗試將 PNG 檔案加載到以下檔案中時,我有一個基本的捕獲錯誤的方法TImage:
try
Previewimage.Picture.LoadFromFile(filename);
except
//code to handle exception
end;
通常,如果檔案不存在,或者在我的情況下 PNG 已損壞,這可以正常作業。我無法控制 PNG 的源代碼創建,因此需要在無法加載 PNG 時進行捕獲,即它給出了錯誤:
此“便攜式網路圖形”影像無效,因為它包含無效資料(crc 錯誤)。
我的問題是try..except在作業執行緒中。這似乎導致try..except被忽略,并且我的程式因 CRC 例外而崩潰。
這個問題有什么簡單的解決方法嗎?
uj5u.com熱心網友回復:
例外和try..except塊在作業執行緒中作業得很好。但是在沒有適當同步的情況下訪問 UI 控制元件可能會導致各種問題。所以不要這樣做。
在作業執行緒的情況下,使用本地加載PNG檔案TPicture物件,或更好的TPNGImage物件,然后使用TThread.Synchronize()或TThread.Notify()以Assign()該物件為TImage在主執行緒,如背景關系:
try
PNG := TPNGImage.Create;
try
PNG.LoadFromFile(filename);
TThread.Synchronize(nil,
procedure
begin
Previewimage.Picture.Assign(PNG);
end
);
finally
PNG.Free;
end;
except
//code to handle exception
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/374779.html
