Aus meiner Sicht wäre die einfachste Lösung einfach vor dem Betreten der CS anzufragen, ob man sich im Hauptthread befindet und nur wenn
nicht den Lock zu setzten und später wieder zu öffnen. Nur irgendwie kommt mir dies ein bisschen komisch vor, denn warum hat man dies dann nicht gleich in die CS-Komponente integriert?
Um das nachträglich einzubauen kann man ja auch ganz einfach mit einer abgeleiteten Klasse arbeiten, so hält sich der Aufwand in Grenzen.
Delphi-Quellcode:
procedure TIMemo.SetValue(A: string);
begin
if not(GetCurrentThreadId = MainThreadID) then
FMultiReadExclusiveWriteSynchronizer.BeginWrite;
try
FMemo.Lines.Text := A;
finally
if not(GetCurrentThreadId = MainThreadID) then
FMultiReadExclusiveWriteSynchronizer.EndWrite;
end;
end;