基于此article:
在我的数据库上做一些工作时,我使用此代码在给定的Window Handle上制作一些动画:
while not Terminated do
begin
// some code....
// draw onto the Window DC
DC := GetDC(FWnd); // FWnd is the Window Handle
// DC := GetDCEx(FWnd, 0, DCX_VALIDATE or DCX_LOCKWINDOWUPDATE);
if DC <> 0 then
try
BitBlt(DC,
FPaintRect.Left,
FPaintRect.Top,
ImageRect.Right,
ImageRect.Bottom,
Bitmap.Canvas.handle,
0, 0,
SRCCOPY);
finally
ReleaseDC(FWnd, DC);
end;
// more code....
end; // end while
它是线程安全的,还是我应该以某种方式锁定DC?
另外,我可以使用GetDCEx吗? 感谢。
答案 0 :(得分:2)
不,假设在主(GUI)线程中创建了窗口句柄(FWnd
),则代码不是线程安全的。标准的VCL方法是通过Synchronize
类的Queue
或TThread
方法在GUI线程中调用所有GDI函数。