1
달성하기 위해 다시 정의 할 수있는 사용자 인터페이스에 의해 생성 된 체크 박스의 상태, 주소 일부 멀티 스레드 활동을 가지고 프로그램에 문제가있어 이 코드는 아래 오류를 사용하여 중지 될 때 어떤 경우에 작동하고 다른 경우에는 작동하지 않습니다.
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 방법론을 살펴본 결과, 원래 호출을 확인하기 위해 end invoke를 사용할 수 있다는 생각이 들었습니다. – bgkdavis