Get data from separate thread through Custom Events

I have a client socket running in a separate thread, which is started from a playercontroller. After the thread starts, it communicates with a server throughout the lifespan of the game. It will from time to time receive data over the socket which is relevant for the playercontroller. What is the most effective and good-practice way of receiving this data in the playercontroller?

I managed to set up events that is triggered in the client socket thread, and bound to functions in the playercontroller, which are fired when the socket receives data, but haven’t yet managed to send data with the events, which is the strategy I opt for.
Firstly, is this possible, and if so how? Secondly, is this a good strategy, when it comes to thread safety and performance ?

Hope I made my question somewhat clear.

As far as I have been able to figure out, using events to message other threads does not work in a thread-safe manner in UE4. Another approach, and one I would reccommend, is to use UE4’s TQueue class and poll it on your

PlayerController’s tick event, or use a less resource intensive (and likely less frequent) polling method like timers.
In my thread I can populate the TQueue with the Enqueue() method, then what I do on the main thread is run a while loop on the Queue.IsEmpty() check, so long as there is data to dequeue, I dequeue it and act on it on the main thread as I desire.

You can use a similar TQueue access method for sending by using a separate TQueue and using enqueue on the main thread and Dequeue on the off thread.