ParameterizedThreadStart Delegát
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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:
Delegát ThreadStart , který je předán konstruktoru Thread.Thread(ThreadStart) . Jakákoli metoda, která nemá žádné parametry a která vrací
voidv jazyce C# nebo je proceduraSubv Visual Basic může představovat delegáta.Delegát ParameterizedThreadStart , který je předán konstruktoru Thread.Thread(ParameterizedThreadStart) . Každá metoda, která má jeden parametr typu Object a která vrací void v jazyce C# nebo je dílčí procedura v Visual Basic může představovat delegáta.
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ů:
- Pole.
- Typ kolekce, pokud jsou všechny datové položky stejného typu.
- Typ řazené kolekce členů, například Tuple<T1,T2> .Tuple<T1,T2,T3,T4>
Metody rozšíření
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Získá objekt, který představuje metodu reprezentovanou zadaným delegátem. |