ParameterizedThreadStart Delegera

Definition

Representerar metoden som körs på en Thread.

public delegate void ParameterizedThreadStart(System::Object ^ obj);
public delegate void ParameterizedThreadStart(object? obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
type ParameterizedThreadStart = delegate of obj -> unit
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)

Parametrar

obj
Object

Ett objekt som innehåller data för trådproceduren.

Attribut

Exempel

I följande kodexempel används ett ParameterizedThreadStart ombud för att köra en statisk metod och en instansmetod. Det första ParameterizedThreadStart ombudet representeras av den statiska DoWork metoden och den andra representeras av instansmetoden DoMoreWork . Båda metoderna matchar ombudssignaturen ParameterizedThreadStart . De har alltså en enda parameter av typen Object och returnerar inte något värde.

Note

Kompilatorerna Visual Basic och C# härleder ParameterizedThreadStart-ombudet från signaturerna för metoderna DoWork och DoMoreWork och anropar rätt konstruktor. Därför finns det inget explicit konstruktoranrop i koden.

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.'

Kommentarer

När en hanterad tråd skapas representeras metoden som körs på tråden av:

Tråden börjar inte köras förrän Thread.Start metoden anropas. Eller-ombudet ThreadStartParameterizedThreadStart anropas i tråden och körningen börjar på den första raden i metoden som representeras av ombudet. När det gäller ombudet ParameterizedThreadStart skickas objektet som skickas till Start(Object) metoden till ombudet.

Note

Visual Basic- och C#-användare kan utelämna ThreadStart eller ParameterizedThreadStart delegera konstruktorn när du skapar en tråd. I Visual Basic använder du operatorn AddressOf när du skickar metoden till konstruktorn Thread, till exempel Dim t As New Thread(AddressOf ThreadProc). I C# anger du bara namnet på trådproceduren. Kompilatorn väljer rätt ombudskonstruktor.

Note

När du skapar ett ParameterizedThreadStart ombud för en instansmetod i C++, är den första parametern för konstruktorn instansvariabeln. För en statisk metod är konstruktorns första parameter noll. För en statisk metod kräver ombudskonstruktorn endast en parameter: adressen till motringningsmetoden, som kvalificerats av klassnamnet.

Ombudet ParameterizedThreadStart och metodöverlagringen Thread.Start(Object) gör det enkelt att skicka data till en trådprocedur, men den här tekniken är inte typsäker eftersom alla objekt kan skickas till Thread.Start(Object). Ett mer robust sätt att skicka data till en trådprocedur är att placera både trådproceduren och datafälten i ett arbetsobjekt. Mer information finns i Skapa trådar och skicka data vid starttid.

Ombudet ParameterizedThreadStart stöder endast en enskild parameter. Du kan skicka flera dataobjekt till genom att göra parametern till ParameterizedThreadStart något av följande:

Tilläggsmetoder

Name Description
GetMethodInfo(Delegate)

Hämtar ett objekt som representerar den metod som representeras av det angivna ombudet.

Gäller för

Se även