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