Partager via


ParameterizedThreadStart Délégué

Définition

Représente la méthode qui s’exécute sur un élément 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)

Paramètres

obj
Object

Objet qui contient les données de la procédure thread.

Attributs

Exemples

L’exemple de code suivant utilise un délégué pour exécuter une ParameterizedThreadStart méthode statique et une méthode d’instance. Le premier ParameterizedThreadStart délégué est représenté par la méthode statique DoWork et le second est représenté par la méthode d’instance DoMoreWork . Les deux méthodes correspondent à la ParameterizedThreadStart signature déléguée ; autrement dit, elles ont un seul paramètre de type Object et ne retournent pas de valeur.

Notes

Les compilateurs Visual Basic et C# déduitnt le ParameterizedThreadStart délégué des signatures des DoWork méthodes et DoMoreWork appellent le constructeur correct. Par conséquent, il n’existe aucun appel de constructeur explicite dans le code.

using namespace System;
using namespace System::Threading;

namespace SystemThreadingExample
{
    public ref class Work
    {
    public:
        void StartThreads()
        {
            // Start a thread that calls a parameterized static method.
            Thread^ newThread = gcnew
                Thread(gcnew ParameterizedThreadStart(Work::DoWork));
            newThread->Start(42);
              
            // Start a thread that calls a parameterized instance method.
            Work^ someWork = gcnew Work;
            newThread = gcnew Thread(
                        gcnew ParameterizedThreadStart(someWork,
                        &Work::DoMoreWork));
            newThread->Start("The answer.");
        }

        static void DoWork(Object^ data)
        {
            Console::WriteLine("Static thread procedure. Data='{0}'", 
                data);
        }

        void DoMoreWork(Object^ data)
        {
            Console::WriteLine("Instance thread procedure. Data='{0}'", 
                data);
        }
    };
}

//Entry point of example application
int main()
{
    SystemThreadingExample::Work^ samplework = 
        gcnew SystemThreadingExample::Work();
    samplework->StartThreads();
}
// This example displays output like the following:
//       Static thread procedure. Data='42'
//       Instance thread procedure. Data='The answer.'
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.'

Remarques

Lorsqu’un thread managé est créé, la méthode qui s’exécute sur le thread est représentée par :

Le thread ne commence pas à s’exécuter tant que la Thread.Start méthode n’est pas appelée. Le ThreadStart ou ParameterizedThreadStart le délégué est appelé sur le thread et l’exécution commence à la première ligne de la méthode représentée par le délégué. Dans le cas du ParameterizedThreadStart délégué, l’objet passé à la Start(Object) méthode est passé au délégué.

Notes

Visual Basic et les utilisateurs C# peuvent omettre le constructeur ou ParameterizedThreadStart le délégué lors de la ThreadStart création d’un thread. Dans Visual Basic, utilisez l’opérateur AddressOf lors du passage de votre méthode au Thread constructeur; par exemple. Dim t As New Thread(AddressOf ThreadProc) En C#, spécifiez simplement le nom de la procédure thread. Le compilateur sélectionne le constructeur délégué approprié.

Notes

Lorsque vous créez un délégué pour une ParameterizedThreadStart méthode d’instance en C++, le premier paramètre du constructeur est la variable d’instance. Pour une méthode statique, le premier paramètre du constructeur est zéro. Pour une méthode statique, le constructeur délégué ne nécessite qu’un seul paramètre : l’adresse de la méthode de rappel, qualifiée par le nom de la classe.

Le ParameterizedThreadStart délégué et la surcharge de méthode facilitent la Thread.Start(Object) transmission de données à une procédure thread, mais cette technique n’est pas sécurisée, car tout objet peut être passé à Thread.Start(Object). Une méthode plus robuste pour transmettre des données à une procédure thread consiste à placer à la fois la procédure thread et les champs de données dans un objet worker. Pour plus d’informations, consultez Création de threads et transmission de données au moment du début.

Le ParameterizedThreadStart délégué ne prend en charge qu’un seul paramètre. Vous pouvez transmettre plusieurs éléments de données à ce ParameterizedThreadStart paramètre l’un des éléments suivants :

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Voir aussi