I have a thread running on a child form, I want to activate a control on the parent form but cannot. It works fine if It's done from the child forms UI thread:
(FormMain.SetControlPropertyValue(FormMain.RBSQL2005, "Checked", True))
but not from a thread running on the child form:
Public Class FormRestoreDB
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t = New Thread(AddressOf UpdateListView1)
t.Start()
End Sub
Private Sub UpdateListView1()
'FormMain.SetControlPropertyValue(FormMain.RBSQL2005, "Checked", True)
FormMain.RBSQL2005.Checked = True
End Sub
End Class
Public Class FormMain
Delegate Sub SetControlValueCallback(ByVal oControl As Control, ByVal propName As String, ByVal propValue As Object)
Public Sub SetControlPropertyValue(ByVal oControl As Control, ByVal propName As String, ByVal propValue As Object)
If (oControl.InvokeRequired) Then
Dim d As New SetControlValueCallback(AddressOf SetControlPropertyValue)
oControl.Invoke(d, New Object() {oControl, propName, propValue})
Else
Dim t As Type = oControl.[GetType]()
Dim props As PropertyInfo() = t.GetProperties()
For Each p As PropertyInfo In props
If p.Name.ToUpper() = propName.ToUpper() Then
p.SetValue(oControl, propValue, Nothing)
End If
Next
End If
End Sub
End Class
What am I doing wrong?