1 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
返回值
你可以返回值。
func DoTimeConsumingStuff() int {
time.Sleep(1 * time.Second)
counter++
return counter
}
然后在單擊按鈕時(shí)生成一個(gè)匿名 goroutine,以免阻塞 UI。
counterButton := widget.NewButton("Increment", func() {
go func() {
counter := model.DoTimeConsumingStuff(counterChan)
UpdateCounterLabel(counter)
}()
})
打回來
您可以將該UpdateCounterLabel函數(shù)傳遞給您的模型函數(shù),也就是回調(diào)。
func DoTimeConsumingStuff(callback func(int)) {
time.Sleep(1 * time.Second)
counter++
callback(counter)
}
counterButton := widget.NewButton("Increment", func() {
go model.DoTimeConsumingStuff(UpdateCounterLabel)
})
渠道
也許您還可以將一個(gè)通道傳遞給您的模型函數(shù)。但是使用上述方法,這似乎不是必需的。潛在地,如果你有不止一個(gè)反價(jià)值。
func DoTimeConsumingStuff(counterChan chan int) {
for i := 0; i < 10; i++ {
time.Sleep(1 * time.Second)
counter++
counterChan <- counter
}
close(counterChan)
}
然后在 GUI 中,您可以從通道接收,再次在 goroutine 中,以免阻塞 UI。
counterButton := widget.NewButton("Increment", func() {
go func() {
counterChan := make(chan int)
go model.DoTimeConsumingStuff(counterChan)
for counter := range counterChan {
UpdateCounterLabel(counter)
}
}()
})
當(dāng)然,您也可以再次使用在每次迭代時(shí)調(diào)用的回調(diào)。
- 1 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)