Thread Constructor (ThreadStart)
[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]
Initializes a new instance of the Thread class.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- start
- Type: System.Threading.ThreadStart
A delegate that represents the methods to be invoked when this thread begins executing.
| Exception | Condition |
|---|---|
| ArgumentNullException | The start parameter is Nothing. |
A thread does not begin executing when it is created. To schedule the thread for execution, call the Start method.
Note: |
|---|
Visual Basic and C# users can omit the ThreadStart or ParameterizedThreadStart constructor when creating a thread. The compilers automatically call the appropriate constructor. For Visual Basic, use the AddressOf operator when passing your method; for example, Dim t As New Thread(AddressOf ThreadProc). |
This section contains two examples. The first example shows how to create a thread that executes a static method, and the second example shows how to create a thread that executes an instance method.
The examples display their output in a TextBlock on the user interface (UI) thread. To access the TextBlock from the callback thread, the examples use the Dispatcher property to obtain a Dispatcher object for the TextBlock, and then use the Dispatcher.BeginInvoke method to make the cross-thread call.
For more information about thread creation, see Creating Threads and Passing Data at Start Time.
Example 1
The following example shows how to create a thread that executes a static method.
Note: |
|---|
To run this example, see Building examples that have static TextBlock controls for Windows Phone 8. |
Imports System.Threading Public Class Example Private Shared outputBlock As System.Windows.Controls.TextBlock Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock) Example.outputBlock = outputBlock ' To start a thread using a static thread procedure, use the ' class name and method name when you create the ThreadStart ' delegate. Visual Basic expands the AddressOf expression ' to the appropriate delegate creation syntax: ' New ThreadStart(AddressOf Example.DoWork) ' Dim newThread As New Thread(AddressOf Example.DoWork) newThread.Start() End Sub ' Simulate work. To communicate with objects on the UI thread, get the ' Dispatcher for one of the UI objects. Use the Dispatcher object's ' BeginInvoke method to queue a delegate that will run on the UI thread, ' and therefore can safely access UI elements like the TextBlock. Private Shared Sub DoWork() Dim display As New Action(Of String)(AddressOf DisplayOutput) outputBlock.Dispatcher.BeginInvoke(display, _ "Hello from a Shared thread procedure." & vbCrLf) End Sub ' The Dispatcher.BeginInvoke method runs this helper method on the ' UI thread, so it can safely access the TextBlock that is used to ' display the output. Private Shared Sub DisplayOutput(msg) outputBlock.Text &= msg End Sub End Class ' This code example produces the following output: ' 'Hello from a Shared thread procedure.
Example 2
The following example shows how to create a thread that executes an instance method.
Note: |
|---|
To run this example, see Building examples that have static TextBlock controls for Windows Phone 8. |
Imports System.Threading Public Class Example Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock) ' To start a thread using an instance method for the thread ' procedure, use the instance variable and method name when ' you create the ThreadStart delegate. Visual Basic expands ' the AddressOf expression to the appropriate delegate ' creation syntax: ' New ThreadStart(AddressOf w.DoMoreWork) ' Dim w As New Work() w.Data = 42 w.Output = outputBlock Dim newThread As Thread = New Thread(AddressOf w.DoMoreWork) newThread.Start() End Sub End Class Public Class Work Public Data As Integer Public Output As System.Windows.Controls.TextBlock ' Simulate work. To communicate with objects on the UI thread, get the ' Dispatcher for one of the UI objects. Use the Dispatcher object's ' BeginInvoke method to queue a delegate that will run on the UI thread, ' and therefore can safely access UI elements like the TextBlock. Public Sub DoMoreWork() Dim display As New Action(Of String)(AddressOf DisplayOutput) Output.Dispatcher.BeginInvoke(display, _ String.Format("Instance thread procedure. Data={0}", Data) & vbCrLf) End Sub ' The Dispatcher.BeginInvoke method runs this helper method on the ' UI thread, so it can safely access the TextBlock that is used to ' display the output. Private Sub DisplayOutput(msg) Output.Text &= msg End Sub End Class ' This code example produces the following output: ' 'Instance thread procedure. Data=42
Note: