[*]Überall heißt es man soll aus Threads nicht direkt auf Form-Elemente zugreifen. Hier wird es doch gemacht. Also doch kein Problem wenn sicher ist dass kein anderer auf Form1.Memo1 zugreift? Und abgesehen davon dass es sauberer ist die Trennung per Synchronize zu machen?
Nur weil es gemacht wird, ist es nicht korrekt. Die Beispiele sind oft von Testern aus der Beta-Phase, nicht vom Embarcadero selbst.
[*]Im Execute greife ich auf die globale Liste MyList zu. Muss ich die zwingend mit System.TMonitor.Enter
sperren wenn ich nur lesen will?
Es gibt, wie oben schon beschrieben auch andere Möglichkeiten, aber eine dieser solltest tue nutzen.
[*]Was kann passieren wenn ich nur Werte hinzufüge?
Zugriffsverletzungen, invalide Daten, Nichts... je nach dem, was andere Threads gerade machen
[*]Was wenn sich auch Werte ändern könnten?
^^
[*]Obwohl ich MyThread.FreeOnTerminate := true;
gesetzt habe funktioniert die Assign-Abfrage in procedure TForm1.Button2Click(Sender: TObject)
. Setze ich einen Haltepunkt nach dem Terminate ist MyThread nicht NIL.
Free gibt das Objekt frei, die Variabeln werden aber nicht beeinflusst.
[*]Greift man innerhalb einer Klasse besser auf die Variable oder das Property zu (FSleepTime oder SleeptTime)?
SleepTime - dann lässt sich die Implementierung ändern, ohne dass Du überall im Quellcode nachschauen musst.
...
...