2012-01-28 4 views
1

나는vb.net 위임 및 호출 문제

달성하기 위해 다시 정의 할 수있는 사용자 인터페이스에 의해 생성 된 체크 박스의 상태, 주소 일부 멀티 스레드 활동을 가지고 프로그램에 문제가있어 이 코드는 아래 오류를 사용하여 중지 될 때 어떤 경우에 작동하고 다른 경우에는 작동하지 않습니다.

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 

답변

0

예를 들어 가장자리 주변에 더 많은 코드를 사용할 수 있지만 괜찮습니다. 유효한 체크 박스 대신에 아무것도 전달하지 않는 경우가 있습니까?

+0

충돌 할 때 항상 유효한 체크 상자가 전달됩니다. 호출이 비동기 호출에 의해 시작 되었기 때문에 두 번째 호출 바로 다음에 setcheckbox 하위 호출에 대한 주 스레드와 관련이 있다고 의심됩니다. 스레드를 사용하면 주 스레드가 두 번째 호출이 수행 될 때 첫 번째 호출을 여전히 해결할 수 있습니다. 필자가 BeginInvoke/endInvoke 방법론을 살펴본 결과, 원래 호출을 확인하기 위해 end invoke를 사용할 수 있다는 생각이 들었습니다. – bgkdavis