尝试..除了在线程内被忽略

Som*_*lse 0 delphi png vcl timage

try..except当尝试将 PNG 文件加载到以下文件中时,我有一个捕获错误的基本方法TImage

try
  Previewimage.Picture.LoadFromFile(filename);
except
  //code to handle exception
end;
Run Code Online (Sandbox Code Playgroud)

通常,如果文件不存在,或者在我的情况下 PNG 已损坏,则此方法可以正常工作。我无法控制 PNG 的源创建,因此需要捕获 PNG 无法加载的情况,即它给出错误:

此“便携式网络图形”图像无效,因为它包含无效的数据片段(crc 错误)。

我的问题是它try..except在工作线程内。这似乎导致try..except被忽略,并且我的程序因 CRC 异常而崩溃。

对于这个问题有什么简单的解决办法吗?

Rem*_*eau 9

异常和try..except块在工作线程中工作得很好。但是在没有正确同步的情况下访问 UI 控件可能会导致各种问题。所以就不要这样做。

在工作线程的上下文中,使用本地TPicture对象或更好的TPNGImage对象加载 PNG 文件,然后在主线程的上下文中使用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; 
Run Code Online (Sandbox Code Playgroud)