ParameterizedThreadStart Delegát

Definice

Představuje metodu, která se spouští na objektu 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)

Parametry

obj
Object

Objekt, který obsahuje data pro proceduru vlákna.

Atributy

Příklady

Následující příklad kódu používá ParameterizedThreadStart delegáta ke spuštění statické metody a metody instance. První ParameterizedThreadStart delegát je reprezentován statickou DoWork metodou a druhá je reprezentována metodou instance DoMoreWork . Obě metody odpovídají podpisu delegáta ParameterizedThreadStart . To znamená, že mají jeden parametr typu Object a nevrací hodnotu.

Note

Kompilátory Visual Basic a jazyka C# odvozují ParameterizedThreadStart delegáta z podpisů DoWork a DoMoreWork metod a volají správný konstruktor. Proto neexistuje žádné explicitní volání konstruktoru v kódu.

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

Poznámky

Při vytvoření spravovaného vlákna je metoda, která se provádí ve vlákně, reprezentována:

Vlákno nezačne spouštět, dokud Thread.Start se metoda nevolá. Nebo ThreadStartParameterizedThreadStart delegát je vyvolán ve vlákně a spuštění začíná na prvním řádku metody reprezentované delegátem. V případě delegáta ParameterizedThreadStart se předá objekt předaný Start(Object) metodě delegátu.

Note

Visual Basic a uživatelé jazyka C# mohou při vytváření vlákna vynechat konstruktor delegáta ThreadStart nebo ParameterizedThreadStart. V Visual Basic při předávání metody do konstruktoru AddressOf použijte operátor Thread, například Dim t As New Thread(AddressOf ThreadProc). V jazyce C# jednoduše zadejte název procedury vlákna. Kompilátor vybere správný konstruktor delegáta.

Note

Když vytvoříte delegáta ParameterizedThreadStart pro metodu instance v jazyce C++, prvním parametrem konstruktoru je proměnná instance. Pro statickou metodu je první parametr konstruktoru nula. Konstruktor delegáta pro statickou metodu vyžaduje pouze jeden parametr: adresu metody zpětného volání, která je kvalifikovaná názvem třídy.

Delegát ParameterizedThreadStart a Thread.Start(Object) přetížení metody usnadňují předávání dat do vlákna procedury, ale tato technika není typ bezpečný, protože jakýkoli objekt lze předat Thread.Start(Object). Robustnější způsob, jak předat data do procedury vlákna, je umístit proceduru vlákna i datová pole do pracovního objektu. Další informace naleznete v tématu Vytváření vláken a předávání dat při spuštění.

Delegát ParameterizedThreadStart podporuje pouze jeden parametr. Do tohoto parametru ParameterizedThreadStart můžete předat několik datových položek jedním z následujících způsobů:

Metody rozšíření

Name Description
GetMethodInfo(Delegate)

Získá objekt, který představuje metodu reprezentovanou zadaným delegátem.

Platí pro

Viz také