ParameterizedThreadStart Gedelegeerde

Definitie

Vertegenwoordigt de methode die wordt uitgevoerd op een 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)

Parameters

obj
Object

Een object met gegevens voor de threadprocedure.

Kenmerken

Voorbeelden

In het volgende codevoorbeeld wordt een ParameterizedThreadStart gemachtigde gebruikt om een statische methode en een instantiemethode uit te voeren. De eerste ParameterizedThreadStart gemachtigde wordt vertegenwoordigd door de statische DoWork methode en de tweede wordt vertegenwoordigd door de instantiemethode DoMoreWork . Beide methoden komen overeen met de handtekening voor ParameterizedThreadStart gemachtigden. Dat wil gezegd: ze hebben één parameter van het type Object en retourneren geen waarde.

Note

De Visual Basic- en C#-compilers afleiden de ParameterizedThreadStart gedelegeerde uit de handtekeningen van de DoWork- en DoMoreWork-methoden en roepen de juiste constructor aan. Er is dus geen expliciete constructor-aanroep in de 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.'

Opmerkingen

Wanneer een beheerde thread wordt gemaakt, wordt de methode die op de thread wordt uitgevoerd, vertegenwoordigd door:

  • Een ThreadStart gemachtigde die wordt doorgegeven aan de Thread.Thread(ThreadStart) constructor. Elke methode die geen parameters heeft en die void in C# retourneert of een Sub procedure in Visual Basic kan de gemachtigde vertegenwoordigen.

  • Een ParameterizedThreadStart gemachtigde die wordt doorgegeven aan de Thread.Thread(ParameterizedThreadStart) constructor. Elke methode met één parameter van het type Object en die ongeldigheid in C# retourneert of een subprocedure in Visual Basic kan de gemachtigde vertegenwoordigen.

De thread wordt pas uitgevoerd als de Thread.Start methode wordt aangeroepen. De ThreadStart of ParameterizedThreadStart gemachtigde wordt aangeroepen op de thread en de uitvoering begint op de eerste regel van de methode die wordt vertegenwoordigd door de gemachtigde. In het geval van de ParameterizedThreadStart gemachtigde wordt het object dat aan de Start(Object) methode wordt doorgegeven, doorgegeven aan de gemachtigde.

Note

Visual Basic- en C#-gebruikers kunnen de ThreadStart of ParameterizedThreadStart gedelegeerde constructor weglaten bij het maken van een thread. Gebruik in Visual Basic de operator AddressOf bij het doorgeven van uw methode aan de constructor Thread; bijvoorbeeld Dim t As New Thread(AddressOf ThreadProc). Geef in C# gewoon de naam van de threadprocedure op. De compiler selecteert de juiste gemachtigde constructor.

Note

Wanneer u een ParameterizedThreadStart gemachtigde voor een instantiemethode in C++maakt, is de eerste parameter van de constructor de instantievariabele. Voor een statische methode is de eerste parameter van de constructor nul. Voor een statische methode vereist de gedelegeerde constructor slechts één parameter: het adres van de callback-methode, gekwalificeerd door de klassenaam.

De ParameterizedThreadStart gemachtigde en de overbelasting van de Thread.Start(Object) methode maken het gemakkelijk om gegevens door te geven aan een threadprocedure, maar deze techniek is niet type veilig omdat elk object kan worden doorgegeven aan Thread.Start(Object). Een krachtigere manier om gegevens door te geven aan een threadprocedure is door zowel de threadprocedure als de gegevensvelden in een werkrolobject te plaatsen. Zie Threads maken en gegevens doorgeven bij de begintijd voor meer informatie.

De ParameterizedThreadStart gemachtigde ondersteunt slechts één parameter. U kunt meerdere gegevensitems doorgeven aan de ParameterizedThreadStart parameter door een van de volgende parameters te maken:

Extensiemethoden

Name Description
GetMethodInfo(Delegate)

Hiermee haalt u een object op dat de methode vertegenwoordigt die wordt vertegenwoordigd door de opgegeven gemachtigde.

Van toepassing op

Zie ook