Your event handler, and therefore the VCL accessing code that it contains, executes on a thread other than the GUI thread. All code that accesses VCL objects must execute on the GUI thread. Hence, you will need to change your code to make sure that the VCL portions are marshalled on to the GUI thread.
Use TIdSync or TThread.Synchronize to marshal the VCL portions of your code onto the GUI thread. Remy gives an example of the former approach here: Indy synchronize ServerTCPExecute