【发布时间】:2015-03-07 20:13:55
【问题描述】:
我试图在按钮被禁用时更改它的文本。我有一个在按下按钮时调用的后台工作人员,我试图让按钮被禁用 5 秒,按钮上的文本指示在按钮再次启用之前的剩余时间。
以下是我的代码,去掉了不相关的部分:
Private Sub btnDispense_Click(sender As System.Object, e As System.EventArgs) Handles btnDispense.Click
btnDispense.Enabled = False
BackgroundWorker1.RunWorkerAsync()
' Lots of my irrelevant code in here.
Private Sub bgwWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
' Changes button text from 5 to 1, with threading to keep time.
btnDispense.Text = "Dispense (-1) [5]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [4]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [3]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [2]"
Threading.Thread.Sleep(1000)
btnDispense.Text = "Dispense (-1) [1]"
Threading.Thread.Sleep(1000)
End Sub
Private Sub bgwWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
' Called when the BackgroundWorker is completed.
btnDispense.Enabled = True
End Sub
当我尝试运行它时,没有错误,所以我的语法没问题。我唯一的问题是按钮上的文本没有改变;这是因为按钮被禁用了吗?我不知道该怎么做。
任何帮助将不胜感激!
【问题讨论】:
-
无论是启用还是禁用,按钮的文本都可以更改。您的问题是您无法直接从后台工作人员更新 UI 控件,无论是使用委托还是工作人员的进度更新事件。
-
如何使用工作进程更新事件?我正在查看 MSDN 页面,但信息对我来说不是那么清楚。谢谢。