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 异常而崩溃。
对于这个问题有什么简单的解决办法吗?
异常和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)
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |