[英]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.