繁体   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