I created an update sub in a thread so events still fire. But you shouldnt change the gui from the thread. No, i cant just use a timer which does redraw in the main thread because then it would be a fixed update, not an update. Is it possible?

I would still put it in a timer. Make the timer with a small period (maybe 100 ms). Have the timer read a global boolean variable stored somewhere that acts as a flag. When the timer runs, it reads the flag. If the flag is false, do nothing - nothing gets updated. If the flag is true, it updates the gui an sets the flag to false.

This way, anytime you need to update the gui, be it from a thread or anywhere, just set the flag to true and the next timer run will update it.