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循环的第一次迭代中。