Du hast zwei Möglichkeiten: Synchron (
TThread.Synchronize(..)
) und asynchron (
TThread.Queue(..)
)
Wenn du die Auswirkungen/Resultate/Rückgaben des Codes den du im Kontext eines anderen Threads ausführen möchtest direkt brauchst, dann brauchst du
TThread.Synchronize(..)
Das "Problem" wird garantiert auftreten, hier noch einmal das gleiche Beispiel, nur etwas ausführlicher:
Delphi-Quellcode:
procedure TForm17.Button1Click(Sender: TObject);
begin
TThread.CreateAnonymousThread(
procedure()
var
capturedVariable: Integer;
begin
capturedVariable := 100;
TThread.Queue(
nil,
procedure()
begin
capturedVariable := 42;
end
);
case capturedVariable of
100:
Beep();
42:
begin
Beep();
Beep();
end;
else
Beep(); Beep(); Beep();
end;
end
).Start();
end;