ParameterizedThreadStart Delegált
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
voidad vissza C#-ban, vagySubeljá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:
- Egy tömb.
- Gyűjteménytípus, ha az összes adatelem azonos típusú.
- A tuple típus, például Tuple<T1,T2> vagy Tuple<T1,T2,T3,T4>.
Bővítő metódusok
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Lekéri a megadott meghatalmazott által képviselt metódust képviselő objektumot. |