Gut, ich denke das Problem hatte prinzipiell jeder schonmal mit den Threads.
Die Antwort nennt sich: Queues & Triggers.
Bei Funktionen wie Resize wo du kein Feedback benötigst, baust du dir einfach eine One-Way-Queue, die den Hauptthread triggert und das Resize dort ausführt.
Bei Funktionen wie GetClientSize o.ä. nimmst du nen Trigger, sprich Event unter Windows, pthread_cond bei Linux/Mac/iPhone, übergibst den Pointer dafür sowie Platz für die Antwort ebenfalls in der Queue und lässt den Hauptthread dort die Ergebnisse (Größe in dem Fall) reinfüllen und anschließend das Teil triggern, so dass der Parallel-Thread solange wartet, bis er den Wert hat.
Letzteres zerstört natürlich den Vorteil von Multithreading, aber ich gehe mal nicht davon aus, dass du 20mal die Sekunde die ClientSize abfragst, von daher ist das eigentliche eine der üblichsten Lösungen dafür.
Spätestens wenn das Fenster-System in einer anderen Sprache ist wie der Engine... wie vor allem bei Objective C (Mac) oder Android der Fall, geht an solchen Queues als Feedback-Kanal eh kein weg mehr vorbei, von daher kanns generell nicht schaden darauf aufzubauen.
LG
Alyx