ParameterizedThreadStart Delegált

Definíció

Azt a metódust jelöli, amely egy 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éterek

obj
Object

Egy objektum, amely adatokat tartalmaz a szál eljárásához.

Attribútumok

Példák

Az alábbi példakód egy ParameterizedThreadStart delegált használatával hajt végre egy statikus és egy példánymetódust. Az első ParameterizedThreadStart delegáltat a statikus DoWork metódus, a másodikat pedig a példány DoMoreWork metódusa képviseli. Mindkét metódus egyezik a ParameterizedThreadStart delegált aláírással, azaz egyetlen típusú Object paraméterrel rendelkeznek, és nem adnak vissza értéket.

Note

A Visual Basic és a C# fordítói a ParameterizedThreadStart és DoWork metódusok aláírásaiból következtetnek a DoMoreWork delegáltra, és meghívják a megfelelő konstruktort. Így nincs explicit konstruktorhívás a kódban.

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

Megjegyzések

Felügyelt szál létrehozásakor a szálon végrehajtott metódust a következő képviseli:

  • A ThreadStart konstruktornak Thread.Thread(ThreadStart) átadott meghatalmazott. Minden olyan metódus, amely nem rendelkezik paraméterekkel, és void ad vissza C#-ban, vagy Sub eljárás a Visual Basic, képviselheti a meghatalmazottat.

  • A ParameterizedThreadStart konstruktornak Thread.Thread(ParameterizedThreadStart) átadott meghatalmazott. Minden olyan metódus, amely egyetlen Object típusú paraméterrel rendelkezik, és amely C#-ban üres értéket ad vissza, vagy a Visual Basic alművelete, képviselheti a meghatalmazottat.

A szál csak a metódus meghívása után kezdi meg a Thread.Start végrehajtást. ThreadStart A ParameterizedThreadStart program meghívja a vagy meghatalmazottat a szálon, és a végrehajtás a meghatalmazott által képviselt metódus első sorában kezdődik. A delegált esetében a ParameterizedThreadStart metódusnak Start(Object) átadott objektum átadása a meghatalmazottnak történik.

Note

Visual Basic és C# felhasználók kihagyhatják a ThreadStart vagy ParameterizedThreadStart delegált konstruktort a szál létrehozásakor. A Visual Basic használja a AddressOf operátort, amikor a metódust a Thread konstruktornak adja át, például Dim t As New Thread(AddressOf ThreadProc). A C#-ban egyszerűen adja meg a szál eljárásának nevét. A fordító kiválasztja a megfelelő delegált konstruktort.

Note

Amikor egy példánymetódushoz létrehoz egy ParameterizedThreadStart meghatalmazottat a C++-ban, a konstruktor első paramétere a példányváltozó. Statikus módszer esetén a konstruktor első paramétere nulla. Statikus metódus esetén a delegált konstruktornak csak egy paraméterre van szüksége: a visszahívási metódus címe, amely az osztálynév alapján van minősítve.

A ParameterizedThreadStart delegálás és a Thread.Start(Object) metódus túlterhelése megkönnyíti az adatok továbbítását egy szálas eljárásnak, de ez a technika nem biztonságos, mert bármely objektum átadható.Thread.Start(Object) Az adatok szálas eljárásba való továbbításának robusztusabb módja, ha a szál eljárást és az adatmezőket is egy feldolgozó objektumba helyezi. További információ: Szálak létrehozása és adatok továbbítása a kezdési időpontban.

A ParameterizedThreadStart meghatalmazott csak egyetlen paramétert támogat. Több adatelemet is átadhat a ParameterizedThreadStart paraméternek az alábbiak egyikével:

Bővítő metódusok

Name Description
GetMethodInfo(Delegate)

Lekéri a megadott meghatalmazott által képviselt metódust képviselő objektumot.

A következőre érvényes:

Lásd még