美好的一天。我想知道是否有便捷或简化的方式将FXTask
的{{1}}和messageProperty
绑定到runningProperty
的{{1}}和Label
属性是否与textProperty
和visibleWhen
本身不耦合?
例如,在下面的示例应用程序中,我通过将标签的引用耦合到任务来绑定FXTask
,从而引入了额外的Label
。类似地,我通过将任务的引用耦合到引入额外messageProperty
的标签来绑定lateinit var statusLabel
。
runningProperty
答案 0 :(得分:1)
有一个TaskStatus
对象,可以将其传递到runAsync
中。该对象具有您正在运行的任务的所有有趣的属性。也无需继承Task
:)
class DummyView : View("Dummy View") {
val taskStatus = TaskStatus()
override val root = vbox {
button("Do task") {
action {
runAsync(taskStatus) {
updateMessage("Initializing task...")
(1..3).forEach {
Thread.sleep(1000)
updateMessage("Doing task: $it...")
}
Thread.sleep(1000)
updateMessage("Task done")
Thread.sleep(1000)
}
}
}
label(taskStatus.message) {
visibleWhen(taskStatus.running)
}
}
}
您甚至可以通过注入自动使用taskStatus。如果不将TaskStatus的特定实例传递给runAsync,则将获得默认实例。因此,这也适用:(区别是注入了TaskStatus,并且没有TaskStatus的实例传递给runAsync)
class DummyView : View("Dummy View") {
val taskStatus: TaskStatus by inject()
override val root = vbox {
button("Do task") {
action {
runAsync {
updateMessage("Initializing task...")
(1..3).forEach {
Thread.sleep(1000)
updateMessage("Doing task: $it...")
}
Thread.sleep(1000)
updateMessage("Task done")
Thread.sleep(1000)
}
}
}
label(taskStatus.message) {
visibleWhen(taskStatus.running)
}
}
}