Delegates are what other languages loosely refer to as "function pointers".
Since you can't touch a control from another thread, you have to use a Sub or Function to update the control how you want. Now, you have to call this method somehow, but you have to do it in a way that says "I want this thread to call that method." This is where the Invoke comes in.
In your example, you could have a Sub that sets the Text property of a specific label control:
Private Delegate Sub UpdateLabel1Delegate(ByVal message As String)
Private Sub UpdateLabel1Text(ByVal message As String)
If Label1.InvokeRequired Then
Me.BeginInvoke(New UpdateLabel1Delegate(AddressOf UpdateLabel1Text), message)
Else
Label1.Text = message
End If
End Sub
.
.
.
UpdateLabel1Text("This is a test...")