Das Suchen und hinzufügen in TDictionay muß bei Threads gegen parallele Zugriffe geschützt werden.
D.h. sollte das ContainsKey false zurück liefern und den Eintrag hinzugefügt werden,
müss man diesen Bereich in ein TCriticalSection Bereich durchgeführt werden.
Wenn zur gleichen Zeit eine weitere Abfrage kommt, wird diese diesen Eintrag
auch in das Dictinary einstellen wollen. Was dann zu den genannten Fehlermeldung führt.
Delphi-Quellcode:
var
FLock : TCriticalSection;
procedure TTeItemInfo.AddSmallDataFromListAsync(list: TList<TeItemDB.TTeItemDBData>; lang: TTeLanguage);
begin
FEs := TTask.Create(procedure()
var
i: Integer;
s: String;
begin
if not Assigned(FLock) then
FLock := TCriticalSection.Create
for i := 0 to list.Count -1 do
begin
FLock.Enter;
if smalldata.ContainsKey(list[i].id) = false then
begin
s := DownloadInfo(list[i].id, lang.LoadedLanguage);
AddSmallInfo(s,list[i].id,lang);
end;
FLock.Leave;
end;
if Assigned(FOnUpdate) then FOnUpdate(self);
end);
FEs.Start;
end;