I am not aware that LCL is/was declared safe between threads (but perhaps i missed the memo on that one
).
Me too and I asked so maybe someone else can explain more about it.
You have two threads 1) your application with the Form etc. 2) your tbThread
In threads you are not allowed to change a variable from another thread without taking precautions (as is normal for threads). Changing some of the properties of your dynamically created component creates a chain of changes (writing to variables actions) throughout the component tree of your form. That is not allowed to do from another thread but the form's thread.
The practical changes are listed by the code from engkin.
This is all standard/basic part of threads and sharing variables between threads, so any documentation on the subject is able to tell you this. If you really really want to know the why, then please study thread implementations.
(And before you ask: no, i am not an expert on threads, nor do i claim to have all the answers. I simply read the documentation and apply what is written.)
I doubt any of the other readers is willing to explain the concept of threads (and the implications) as there is already so many written on the subject.
Perhaps you could share what kind of answer you would like to receive ? (e.g. at what kind of technical level) Because right now it appears that you do not understand/like the concept of threads, yet you use them (and even claim to be experienced with the subject).