...wie gesagt wenn du korrekt lockst/unlockst geht das (zumindestens bei mir unter xe5) problemlos...
Delphi-Quellcode:
procedure TPaintThread.Execute;
begin
While (Terminated = False) do
begin
MyBild.Canvas.lock;
Original.Canvas.Lock;
try
MyBild.Width := random(500) + 500;
MyBild.Height := random(500) + 500;
MyBild.Canvas.Draw(random(25) + 1, random(25) + 1, Original);
MyBild.Canvas.Rectangle(random(25) + 1, random(25) + 1, random(50) + 25, random(50) + 25);
finally
MyBild.Canvas.unlock;
Original.Canvas.Unlock;
end;
Synchronize(Zeichnen);
end;
end;
Ich musste leider feststellen, dass, wenn man diesen Code eine Weile durchsteppen lässt, es zu einer EAccessviolation kommt.
Diese findet allerdings nicht im Threadablauf, sondern im Prozess der Hauptform statt, während das Bild per Synchronize gezeichnet wird.
Diese EAccessViolation findet sogar dann statt, wenn man den Code so abändert:
Delphi-Quellcode:
procedure TPaintThread.Execute;
begin
While (Terminated = False) do
begin
try
Synchronize(Zeichnen);
finally
end;
sleep(1);
end;
end;
procedure TPaintThread.Zeichnen;
begin
//
end;
Das bedeutet, dass allein das Aufrufen der (leeren) Synchronize-Methode einen EAccess-Error hervorruft, zumal nichts anderes der Auslöser sein kann.
Versteht ihr, was da schief läuft?
(Der Fehler kommt oft nach einigen Sekunden, manchmal aber auch garnicht)