ParameterizedThreadStart Gedelegeerde
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Vertegenwoordigt de methode die wordt uitgevoerd op een Thread.
public delegate void ParameterizedThreadStart(System::Object ^ obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)
Parameters
- obj
- Object
Een object met gegevens voor de threadprocedure.
- Kenmerken
Voorbeelden
In het volgende codevoorbeeld wordt een ParameterizedThreadStart gemachtigde gebruikt om een statische methode en een instantiemethode uit te voeren. De eerste ParameterizedThreadStart gemachtigde wordt vertegenwoordigd door de statische DoWork methode en de tweede wordt vertegenwoordigd door de instantiemethode DoMoreWork . Beide methoden komen overeen met de handtekening voor ParameterizedThreadStart gemachtigden. Dat wil gezegd: ze hebben één parameter van het type Object en retourneren geen waarde.
Note
De Visual Basic- en C#-compilers afleiden de ParameterizedThreadStart gedelegeerde uit de handtekeningen van de DoWork- en DoMoreWork-methoden en roepen de juiste constructor aan. Er is dus geen expliciete constructor-aanroep in de code.
using System;
using System.Threading;
public class Work
{
public static void Main()
{
// Start a thread that calls a parameterized static method.
Thread newThread = new Thread(Work.DoWork);
newThread.Start(42);
// Start a thread that calls a parameterized instance method.
Work w = new Work();
newThread = new Thread(w.DoMoreWork);
newThread.Start("The answer.");
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Instance thread procedure. Data='{0}'",
data);
}
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
Imports System.Threading
Public Class Work
Shared Sub Main()
' Start a thread that calls a parameterized static method.
Dim newThread As New Thread(AddressOf Work.DoWork)
newThread.Start(42)
' Start a thread that calls a parameterized instance method.
Dim w As New Work()
newThread = New Thread(AddressOf w.DoMoreWork)
newThread.Start("The answer.")
End Sub
Public Shared Sub DoWork(ByVal data As Object)
Console.WriteLine("Static thread procedure. Data='{0}'",
data)
End Sub
Public Sub DoMoreWork(ByVal data As Object)
Console.WriteLine("Instance thread procedure. Data='{0}'",
data)
End Sub
End Class
' This example displays output like the following:
' Static thread procedure. Data='42'
' Instance thread procedure. Data='The answer.'
Opmerkingen
Wanneer een beheerde thread wordt gemaakt, wordt de methode die op de thread wordt uitgevoerd, vertegenwoordigd door:
Een ThreadStart gemachtigde die wordt doorgegeven aan de Thread.Thread(ThreadStart) constructor. Elke methode die geen parameters heeft en die
voidin C# retourneert of eenSubprocedure in Visual Basic kan de gemachtigde vertegenwoordigen.Een ParameterizedThreadStart gemachtigde die wordt doorgegeven aan de Thread.Thread(ParameterizedThreadStart) constructor. Elke methode met één parameter van het type Object en die ongeldigheid in C# retourneert of een subprocedure in Visual Basic kan de gemachtigde vertegenwoordigen.
De thread wordt pas uitgevoerd als de Thread.Start methode wordt aangeroepen. De ThreadStart of ParameterizedThreadStart gemachtigde wordt aangeroepen op de thread en de uitvoering begint op de eerste regel van de methode die wordt vertegenwoordigd door de gemachtigde. In het geval van de ParameterizedThreadStart gemachtigde wordt het object dat aan de Start(Object) methode wordt doorgegeven, doorgegeven aan de gemachtigde.
Note
Visual Basic- en C#-gebruikers kunnen de ThreadStart of ParameterizedThreadStart gedelegeerde constructor weglaten bij het maken van een thread. Gebruik in Visual Basic de operator AddressOf bij het doorgeven van uw methode aan de constructor Thread; bijvoorbeeld Dim t As New Thread(AddressOf ThreadProc). Geef in C# gewoon de naam van de threadprocedure op. De compiler selecteert de juiste gemachtigde constructor.
Note
Wanneer u een ParameterizedThreadStart gemachtigde voor een instantiemethode in C++maakt, is de eerste parameter van de constructor de instantievariabele. Voor een statische methode is de eerste parameter van de constructor nul. Voor een statische methode vereist de gedelegeerde constructor slechts één parameter: het adres van de callback-methode, gekwalificeerd door de klassenaam.
De ParameterizedThreadStart gemachtigde en de overbelasting van de Thread.Start(Object) methode maken het gemakkelijk om gegevens door te geven aan een threadprocedure, maar deze techniek is niet type veilig omdat elk object kan worden doorgegeven aan Thread.Start(Object). Een krachtigere manier om gegevens door te geven aan een threadprocedure is door zowel de threadprocedure als de gegevensvelden in een werkrolobject te plaatsen. Zie Threads maken en gegevens doorgeven bij de begintijd voor meer informatie.
De ParameterizedThreadStart gemachtigde ondersteunt slechts één parameter. U kunt meerdere gegevensitems doorgeven aan de ParameterizedThreadStart parameter door een van de volgende parameters te maken:
- Een matrix.
- Een verzamelingstype, als alle gegevensitems van hetzelfde type zijn.
- Een tupletype, zoals Tuple<T1,T2> of Tuple<T1,T2,T3,T4>.
Extensiemethoden
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Hiermee haalt u een object op dat de methode vertegenwoordigt die wordt vertegenwoordigd door de opgegeven gemachtigde. |