Vb.net 当我按下按钮启动循环时,它会循环一次,然后冻结
我的程序在循环一次后冻结 我试着替换循环的条件,使它无限期地循环,但它总是做同样的事情Vb.net 当我按下按钮启动循环时,它会循环一次,然后冻结,vb.net,Vb.net,我的程序在循环一次后冻结 我试着替换循环的条件,使它无限期地循环,但它总是做同样的事情 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click ballX = Button2.Location.X + 1 ballY = Button2.Location.Y + 1 Dim g As Integer Dim
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles
Button3.Click
ballX = Button2.Location.X + 1
ballY = Button2.Location.Y + 1
Dim g As Integer
Dim h As Integer
h = Button2.Location.X
Do Until h > 856
Button2.Location = New Point(ballX, ballY)
Me.Update()
Loop
End Sub
它应该移动一个按钮,直到它碰到程序的一侧,然后停止。它所做的只是移动按钮1px,然后你就不能再与程序交互了。有解决办法吗?你试过了吗
Do Until h > 856
Button2.Location = New Point(ballX, ballY)
ballX = Button2.Location.X + 1
ballY = Button2.Location.Y + 1
h = Button2.Location.X
Me.Update()
Loop
你试过了吗
Do Until h > 856
Button2.Location = New Point(ballX, ballY)
ballX = Button2.Location.X + 1
ballY = Button2.Location.Y + 1
h = Button2.Location.X
Me.Update()
Loop
代码在更新UI的同一线程上运行。您的代码处于无限循环中,因此UI永远无法更新(尽管有
Me.update()
)。您需要作为计时器的一部分进行更新,或者使用异步
/等待
功能。我将尝试这些功能,谢谢!这是一个无限循环的原因是,您从未在循环中更新h。@CarrickMullin我想您可能会有这样的印象,因为您设置了h=Button2.location.X
,循环将在每次迭代中检查location.X
。情况并非如此,h
不会改变,即使Location.X
可能会改变。在循环内部,您需要增加一些值,并确保h>856在某个点上可能为真,否则它将永远循环。请注意,由于您也不会在循环中更改ballX
和ballY
,因此实际执行的唯一更改是在while循环的第一次迭代中。您的代码在更新UI的同一线程上运行。您的代码处于无限循环中,因此UI永远无法更新(尽管有Me.update()
)。您需要作为计时器的一部分进行更新,或者使用异步
/等待
功能。我将尝试这些功能,谢谢!这是一个无限循环的原因是,您从未在循环中更新h。@CarrickMullin我想您可能会有这样的印象,因为您设置了h=Button2.location.X
,循环将在每次迭代中检查location.X
。情况并非如此,h
不会改变,即使Location.X
可能会改变。在循环内部,您需要增加一些值,并确保h>856在某个点上可能为真,否则它将永远循环。请注意,由于您也不会在循环中更改ballX
和ballY
,因此实际执行的唯一更改是在while循环的第一次迭代中。