Vb.net control.refresh给我一个跨线程异常,尽管调用方法

Vb.net control.refresh给我一个跨线程异常,尽管调用方法,vb.net,Vb.net,我正在尝试在windows窗体中设置按钮背景图像的动画,模拟旋转的轮子(比旋转的鼠标指针更优雅)。 我在第二个线程中执行此操作,该线程运行一个循环,为按钮背景图像旋转设置动画(第一个线程是创建表单的主线程) 下面是类,第二个线程运行spin()方法: 尽管使用了Invoke方法,buttonform.refresh()还是给了我一个交叉异常。 我尝试调用按钮或表单(ButtonForm.refresh后的注释行) 但是唯一有效的是Form1.button1.refresh(),其中Form1和b

我正在尝试在windows窗体中设置按钮背景图像的动画,模拟旋转的轮子(比旋转的鼠标指针更优雅)。 我在第二个线程中执行此操作,该线程运行一个循环,为按钮背景图像旋转设置动画(第一个线程是创建表单的主线程)

下面是类,第二个线程运行spin()方法:

尽管使用了Invoke方法,buttonform.refresh()还是给了我一个交叉异常。 我尝试调用按钮或表单(ButtonForm.refresh后的注释行) 但是唯一有效的是Form1.button1.refresh(),其中Form1和button1是表单和按钮的名称。
有什么建议吗?

实际更新GUI的两行代码需要位于ELSE块中,以便仅在主UI线程上实际执行方法时执行它们:

更改:

Private Sub refreshButton()
    If ButtonForm.InvokeRequired Then
        Dim del As New DelRefreshButton(AddressOf refreshButton)
        ButtonForm.Invoke(del)
    End If
    TargetButton.BackgroundImage = myImage
    ButtonForm.Refresh()
End Sub
致:


实际更新GUI的两行代码需要位于ELSE块中,以便仅在主UI线程上实际执行该方法时执行它们:

更改:

Private Sub refreshButton()
    If ButtonForm.InvokeRequired Then
        Dim del As New DelRefreshButton(AddressOf refreshButton)
        ButtonForm.Invoke(del)
    End If
    TargetButton.BackgroundImage = myImage
    ButtonForm.Refresh()
End Sub
致:


哦,对不起,多么愚蠢的错误。但是为什么只有ButtonForm.refresh()才会出现交叉线程异常occour,而没有背景图像更改?如果我对刷新行进行注释,则没有例外,但GUI不更新控件在这方面不是非常一致。有些会导致错误,而另一些则不会。读取值时也是如此。但我不知道这是为什么。确保的唯一方法是调用()所有内容=\哦,对不起,多么愚蠢的错误。但是为什么只有ButtonForm.refresh()才会出现交叉线程异常occour,而没有背景图像更改?如果我对刷新行进行注释,则没有例外,但GUI不更新控件在这方面不是非常一致。有些会导致错误,而另一些则不会。读取值时也是如此。但我不知道这是为什么。确保的唯一方法是调用()所有内容=\
Private Sub refreshButton()
    If ButtonForm.InvokeRequired Then
        Dim del As New DelRefreshButton(AddressOf refreshButton)
        ButtonForm.Invoke(del)
    Else
        TargetButton.BackgroundImage = myImage
        ButtonForm.Refresh()
    End If
End Sub