// in some singleton data store object val configurations = mutableListOf().observable() // in some controller val configurations = DataStore.configurations fun validateSetup() { runAsync { configurations.forEach { cfg -> ui { cfg.status = 10.0 } if (verifyOrInstallConfiguration(cfg)) {// time consuming ui { cfg.status = 60.0 } } if (someOtherLongProcess(cfg)) {// time consuming ui { cfg.status = 100.0 } } } } } // in some view val configurations = DataStore.configurations override val root = borderpane { center { vbox { tableview(configurations) { column("Configuration", Configuration::configurationName) column("Build Archive", Configuration::baseArchive) column("Status", Configuration::status) smartResize() } } } }