To create a new thread, you use the Thread class's constructor, passing that constructor the address of the Sub procedure that holds the thread's code, like this:
Dim NewThread As New System.Threading.Thread(AddressOf ThreadCodeProcedure)
We saw how this worked in the Threading example on the CD-ROM, as discussed in the In Depth section of this chapter (and you can see this example in Figure 24.10). There, we used a class named counter that had a procedure named Count we used as a thread procedure; this procedure counted from 1 to a value held in the class's CountTo data member and then raised a FinishedCounting event:
Then we created an object of the counter class and a new thread, Thread1, to run the code in the Count procedure:
Dim counter1 As New counter() Dim Thread1 As New System.Threading.Thread(AddressOf counter1.Count)
And that creates the new thread. To see how to work with this thread, examine the next few topics. You can see the Threading example at work in Figure 24.10; here's the code for that example, Form1.vb:
Public Class Form1 Inherits System.Windows.Forms.Form Friend WithEvents Button1 As System.Windows.Forms.Button Friend WithEvents Button2 As System.Windows.Forms.Button Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents Button3 As System.Windows.Forms.Button Friend WithEvents Button4 As System.Windows.Forms.Button Dim counter1 As New counter() Friend WithEvents Button5 As System.Windows.Forms.Button Friend WithEvents Button6 As System.Windows.Forms.Button Dim Thread1 As New System.Threading.Thread(AddressOf counter1.Count) ' Windows Form Designer generated code… Sub FinishedCountingEventHandler(ByVal Count As Integer) TextBox2.Text = Count End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click TextBox2.Text = "" counter1.CountTo = TextBox1.Text AddHandler counter1.FinishedCounting, AddressOf _ FinishedCountingEventHandler Thread1.Start() End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Thread1.Abort() End Sub Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click Thread1.Sleep(10 * 1000) End Sub Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click Thread1.Priority = System.Threading.ThreadPriority.BelowNormal End Sub Private Sub Button5_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button5.Click Thread1.Suspend() End Sub Private Sub Button6_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button6.Click Thread1.Resume() End Sub End Class
For more on how this example works, take a look at the discussion in the In Depth section of this chapter.