我正在尝试更改在 Visual Basic 中 Do While 循环的每次迭代期间标签显示的文本。一个标签(显示一个整数)工作正常,但另一个保持空白,直到循环完成并显示最终结果。可能是什么问题呢?
Private Sub btnCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnOblicz.Click
Dim W As Single
Dim L As Integer
Dim J As Integer
Dim Y As Double
W = Val(txtW.Text)
L = InputBox("Input L")
J = 0
If W > 0 And W < 100 Then
Do
Y = (2 * Math.Sqrt(W)) / (L - J)
J = J + 1
lblJ.Text = Str(J)
lblY.Text = Str(Y)
MsgBox("Next...")
Loop Until Y < 0
Else
MsgBox("No calculations, because the number is less than zero or greater than a hundred.")
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
Application.DoEvents(),正如其他人所建议的那样,可以工作。但是,您应该意识到它有一些负面影响,例如可能会创建 StackOverflowExceptions。
解决这个问题的正确方法是使用BackgroundWorker 组件。
至于为什么会发生这种情况...请记住,所有 Windows 程序的工作核心都是一个循环,该循环检查来自用户和操作系统的消息(例如 mousemove 事件、点击、击键等)。当您设置标签的 text 属性时,您并没有告诉标签在屏幕上重新绘制自己。相反,您正在向操作系统发布一个事件,然后您的程序的消息循环必须接收和处理该事件。当新事件进入时,消息循环(或泵)将这些事件发送到正确的方法。
您的btnCalc_Click()
函数就是这样一种方法。如果您的函数正在运行,它将被核心 windows 消息传递循环调用,该循环现在正在等待您的方法完成并返回控制权:它已被阻止。在您的函数完成之前,循环无法继续接收和分派方法,因此您程序界面中的任何内容都无法更新。
归档时间: |
|
查看次数: |
4308 次 |
最近记录: |