Seit der PPL denken plötzlich alle, Multithreading und parallel programming sei nen Kindergeburtstag
TParallel.For ist blockend, d.h. alles, was zurück in diesen Thread synchronisieren will, sorgt für einen Deadlock.
Wenn du innerhalb der Tasks eines parallel for die
GUI updaten willst, dann musst du die parallel for in einem eigenen Thread/Task starten.
Hier mal nen kleines Nonsense Beispiel:
Delphi-Quellcode:
TTask.Run(
procedure
begin
TParallel.&For(0, 1000,
procedure (i: Integer)
begin
Sleep(50);
TThread.Queue(nil,
procedure
begin
Caption := IntToStr(i);
end);
end);
TThread.Queue(nil,
procedure
begin
ShowMessage('done');
end);
end);
ShowMessage('started');