vb.net委托和调用问题

vb.net委托和调用问题,vb.net,Vb.net,我遇到了一个程序的问题,在这个程序中,我有一些多线程活动来处理复选框的状态,而复选框又是由用户定义的界面创建的 为了实现这一点,我使用下面的代码,它在某些情况下有效,在其他情况下由于以下错误而停止时崩溃 未处理NullReferenceException 对象引用未设置为对象的实例 Delegate Sub CBSetCallback(ByVal cb As CheckBox, ByVal value As Boolean) Private Sub SetCheckBox(ByVal cb

我遇到了一个程序的问题,在这个程序中,我有一些多线程活动来处理复选框的状态,而复选框又是由用户定义的界面创建的

为了实现这一点,我使用下面的代码,它在某些情况下有效,在其他情况下由于以下错误而停止时崩溃

未处理NullReferenceException 对象引用未设置为对象的实例

Delegate Sub CBSetCallback(ByVal cb As CheckBox, ByVal value As Boolean)



Private Sub SetCheckBox(ByVal cb As CheckBox, ByVal state As Boolean)
    If cb.InvokeRequired Then
        Dim d As New CBSetCallback(AddressOf CBset)
        Invoke(d, New Object() {cb, state})
    Else
        cb.Checked = state
    End If
End Sub

Private Sub CBset(ByVal cb As CheckBox, ByVal state As Boolean)
    cb.Checked = state
End Sub

您的示例可以在边缘添加更多代码,但看起来还可以。有时是否只传递有效的复选框而不传递任何内容?

当它崩溃时,总会传递一个有效的复选框,我怀疑这与主线程调用setcheckbox子线程有关,紧接着是第二次调用,因为调用是由异步线程发起的,所以在执行第二个调用时,主线程可能仍在解析第一个调用。我一直在研究BeginInvoke/endInvoke方法,认为我可以在进行第二次调用之前使用endInvoke检查原始调用是否完成