ParameterizedThreadStart Delegat

Definition

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:

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:

Erweiterungsmethoden

Name Beschreibung
GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die vom angegebenen Delegaten dargestellte Methode darstellt.

Gilt für:

Weitere Informationen