What you want to do instead is use GTask if you can get away with it. Alternatively, use globalIdleTask or globaldleTimeout if you can get away with it, that is ideally to be used for async operations: https://docs.gtk.org/glib/func.idle_add_full.html Other than that yeah, there aren't many good multithreading examples, this is among the stuff I'm working on. Ironically enough, redrawFromThread is a thing owlkettle provides, but I personally do not trust it for redrawing the app from another thread