簡體   English   中英

嘗試..除了在線程內被忽略

[英]Try..Except ignored inside a thread

在嘗試將 PNG 文件加載到TImage時,我有一個基本的try..except來捕獲錯誤:

try
  Previewimage.Picture.LoadFromFile(filename);
except
  //code to handle exception
end;

通常,如果文件不存在,或者在我的情況下 PNG 已損壞,這可以正常工作。 我無法控制PNG的源代碼創建,因此需要在無法加載PNG時捕獲,即它給出了錯誤:

此“便攜式網絡圖形”圖像無效,因為它包含無效的數據片段(crc 錯誤)。

我的問題是try..except在工作線程中。 這似乎導致try..except被忽略,並且我的程序因 CRC 異常而崩潰。

這個問題有什么簡單的解決方法嗎?

異常和try..except塊在工作線程中工作得很好。 但是在沒有正確同步的情況下訪問 UI 控件可能會導致各種問題。 所以不要這樣做。

在工作線程的上下文中,使用本地TPicture object 或更好的TPNGImage object 加載 PNG 文件,然后使用TThread.Synchronize()TThread.Notify() Assign() ZA8CFDE6331BD59EB2AC96F 的上下文中的 ZA8CFDE6331BD59EB2AC96F 到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; 

暫無
暫無

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

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