ParameterizedThreadStart Delegat
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Methode dar, die für ein 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)
Parameter
- obj
- Object
Ein Objekt, das Daten für die Threadprozedur enthält.
- Attribute
Beispiele
Im folgenden Codebeispiel wird ein ParameterizedThreadStart Delegat verwendet, um eine statische Methode und eine Instanzmethode auszuführen. Der erste ParameterizedThreadStart Delegat wird durch die statische DoWork Methode dargestellt, und die zweite wird durch die Instanzmethode DoMoreWork dargestellt. Beide Methoden stimmen mit der ParameterizedThreadStart Stellvertretungssignatur überein, d. h. sie weisen einen einzelnen Parameter vom Typ Object auf und geben keinen Wert zurück.
Note
Die Compiler Visual Basic und C#-Compiler abgeleitet die ParameterizedThreadStart Delegat aus den Signaturen der Methoden DoWork und DoMoreWork und rufen den richtigen Konstruktor auf. Daher gibt es keinen expliziten Konstruktoraufruf im 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.'
Hinweise
Wenn ein verwalteter Thread erstellt wird, wird die Methode, die im Thread ausgeführt wird, durch Folgendes dargestellt:
Ein ThreadStart Delegat, der an den Thread.Thread(ThreadStart) Konstruktor übergeben wird. Jede Methode, die keine Parameter enthält und
voidin C# zurückgibt, oder eineSub-Prozedur in Visual Basic kann den Delegaten darstellen.Ein ParameterizedThreadStart Delegat, der an den Thread.Thread(ParameterizedThreadStart) Konstruktor übergeben wird. Jede Methode mit einem einzelnen Parameter vom Typ Object und die "void" in C# zurückgibt oder eine Sub-Prozedur in Visual Basic kann den Delegaten darstellen.
Der Thread wird erst ausgeführt, wenn die Thread.Start Methode aufgerufen wird. Der oder ParameterizedThreadStart die ThreadStart Stellvertretung wird im Thread aufgerufen, und die Ausführung beginnt mit der ersten Zeile der Methode, die durch den Delegaten dargestellt wird. Im Fall des ParameterizedThreadStart Delegaten wird das Objekt, das an die Start(Object) Methode übergeben wird, an den Delegaten übergeben.
Note
Visual Basic- und C#-Benutzer können beim Erstellen eines Threads den Konstruktor ThreadStart oder ParameterizedThreadStart Stellvertretung weglassen. Verwenden Sie in Visual Basic den Operator AddressOf, wenn Sie die Methode an den Konstruktor Thread übergeben, z. B. Dim t As New Thread(AddressOf ThreadProc). Geben Sie in C# einfach den Namen der Threadprozedur an. Der Compiler wählt den richtigen Delegatkonstruktor aus.
Note
Wenn Sie einen ParameterizedThreadStart Delegaten für eine Instanzmethode in C++ erstellen, ist der erste Parameter des Konstruktors die Instanzvariable. Bei einer statischen Methode ist der erste Parameter des Konstruktors null. Bei einer statischen Methode erfordert der Delegatkonstruktor nur einen Parameter: die Adresse der Rückrufmethode, die durch den Klassennamen qualifiziert ist.
Der ParameterizedThreadStart Delegat und die Thread.Start(Object) Methodenüberladung erleichtern das Übergeben von Daten an eine Threadprozedur, aber diese Technik ist nicht typsicher, da jedes Objekt an Thread.Start(Object)übergeben werden kann. Eine robustere Methode zum Übergeben von Daten an eine Threadprozedur besteht darin, sowohl die Threadprozedur als auch die Datenfelder in ein Arbeitsobjekt einzufügen. Weitere Informationen finden Sie unter Erstellen von Threads und Übergeben von Daten zur Startzeit.
Der Delegat ParameterizedThreadStart unterstützt nur einen einzelnen Parameter. Sie können mehrere Datenelemente an den ParameterizedThreadStart Parameter übergeben, indem Sie diesen Parameter zu einem der folgenden Elemente machen:
- Ein Array.
- Ein Sammlungstyp, wenn alle Datenelemente vom gleichen Typ sind.
- Ein Tupeltyp, z Tuple<T1,T2> . B. oder Tuple<T1,T2,T3,T4>.
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| GetMethodInfo(Delegate) |
Ruft ein Objekt ab, das die vom angegebenen Delegaten dargestellte Methode darstellt. |