(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

ParameterizedThreadStart-Delegat

Stellt die Methode dar, die für einen Thread ausgeführt wird.

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(false)]
public delegate void ParameterizedThreadStart(
	Object obj
)

Parameter

obj
Typ: System.Object
Ein Objekt, das Daten für die Threadprozedur enthält.

Wenn ein verwalteter Thread erstellt wird, wird die Methode, die im Thread ausgeführt wird, durch einen ThreadStart-Delegaten oder einen ParameterizedThreadStart-Delegaten dargestellt, der an den Thread-Konstruktor übergeben wird. Der Thread beginnt erst dann mit der Ausführung, wenn die Thread.Start-Methode aufgerufen wird. Der ThreadStart-Delegat oder der ParameterizedThreadStart-Delegat wird für den Thread aufgerufen, und die Ausführung beginnt mit der ersten Zeile der vom Delegaten dargestellten Methode. Beim ParameterizedThreadStart-Delegaten wird das an die Start(Object)-Methode übergebene Objekt an den Delegaten übergeben.

HinweisHinweis

Benutzer von Visual Basic und C# können beim Erstellen eines Threads den ThreadStart-Delegatkonstruktor oder den ParameterizedThreadStart-Delegatkonstruktor auslassen. Verwenden Sie in Visual Basic den Operator AddressOf beim Übergeben der Methode an den Thread-Konstruktor, z. B. Dim t As New Thread(AddressOf ThreadProc). Geben Sie in C# einfach den Namen der Threadprozedur an. Der Compiler wählt den korrekten Delegatkonstruktor aus.

HinweisHinweis

Wenn Sie einen ParameterizedThreadStart-Delegaten für eine Instanzenmethode in C++ erstellen, ist der erste Parameter des Konstruktors die Instanzenvariable. Bei einer statischen Methode ist der erste Parameter des Konstruktors 0 (null). Bei einer statischen Methode erfordert der Delegatkonstruktor nur einen Parameter: die Adresse der Rückrufmethode, qualifiziert durch den Klassennamen.

Der ParameterizedThreadStart-Delegat und die Thread.Start(Object)-Methodenüberladung vereinfachen das Übergeben von Daten an eine Threadprozedur. Dieses Verfahren ist jedoch nicht typsicher, da jedes beliebige Objekt an Thread.Start(Object) übergeben werden kann. Eine weniger fehleranfällige Methode zum Übergeben von Daten an einen Threadvorgang ist, den Threadvorgang und die Datenfelder in einem Arbeitsobjekt zu platzieren. Weitere Informationen finden Sie unter Erstellen von Threads und Übergeben von Daten zur Startzeit.

Das folgende Codebeispiel zeigt die Syntax zum Erstellen und Verwenden eines ParameterizedThreadStart-Delegaten mit einer statischen Methode und einer Instanzenmethode.

HinweisHinweis

Die Visual Basic- und C#-Compiler leiten den ParameterizedThreadStart-Delegaten von den Signaturen der DoWork-Methode und DoMoreWork-Methode ab 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()
    {
        // To start a thread using a shared thread procedure, use
        // the class name and method name when you create the 
        // ParameterizedThreadStart delegate. C# infers the 
        // appropriate delegate creation syntax:
        //    new ParameterizedThreadStart(Work.DoWork)
        //
        Thread newThread = new Thread(Work.DoWork);

        // Use the overload of the Start method that has a
        // parameter of type Object. You can create an object that
        // contains several pieces of data, or you can pass any 
        // reference type or value type. The following code passes
        // the integer value 42.
        //
        newThread.Start(42);

        // To start a thread using an instance method for the thread 
        // procedure, use the instance variable and method name when 
        // you create the ParameterizedThreadStart delegate. C# infers 
        // the appropriate delegate creation syntax:
        //    new ParameterizedThreadStart(w.DoMoreWork)
        //
        Work w = new Work();
        newThread = new Thread(w.DoMoreWork);

        // Pass an object containing data for the thread.
        //
        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 code example produces the following output (the order 
   of the lines might vary):

Static thread procedure. Data='42'
Instance thread procedure. Data='The answer'
*/


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

Es werden nicht alle Versionen sämtlicher Plattformen von .NET Framework unterstützt.. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft