Delegates - Threading

Started by magesh.p, Jul 26, 2008, 04:00 PM

Previous topic - Next topic

magesh.p

Delegates

In the first FAQ on Multithreading we went over a basic method of launching a thread. That method was fire and forget, and we couldn't pass any values. Delegates give us a lot more power in that we can pass in parameters and use call back methods. A Call Back is a sub that is called from when the new thread ends, it is run on the calling thread which means that we can access the GUI safely from it if the thread was launched from the GUI.

CODE

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   'first, disable the button1 object
   'so the user can't click it again
   Button1.Enabled = False
   del = New ProcessDelegate(AddressOf Me.Process)
   Dim cb As New AsyncCallback(AddressOf Me.ProcessComplete)
   del.BeginInvoke(cb, del)
End Sub

'The Delegate definition
Protected Delegate Sub ProcessDelegate()

'The delegate that will launch the
'process
Protected del As ProcessDelegate

'The Callback method the will launch
'in the original thread when the thread
'completes
Protected Sub ProcessComplete(ByVal ar As System.IAsyncResult)
  me.button1.enabled = true
end sub

'The long process
Protected Sub Process()
   For a As Integer = 1 To 10
      For b As Integer = 1 To 100000000
         'do something really
         'important here
      Next
      'simulate a progress bar
      '(This stuff should be handled in a
      'thread safe manor, but this will
      'work pre-2k5)
      Label2.Text = a.ToString
      Label2.Refresh()
   Next
End Sub
- An Proud Acumen -