ParameterizedThreadStart Delegat
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje metodę wykonywaną w obiekcie 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
Obiekt, który zawiera dane dla procedury wątku.
- Atrybuty
Przykłady
Poniższy przykład kodu używa delegata ParameterizedThreadStart do wykonywania metody statycznej i metody wystąpienia. Pierwszy ParameterizedThreadStart delegat jest reprezentowany przez metodę statyczną DoWork
, a drugi jest reprezentowany przez metodę wystąpienia DoMoreWork
. Obie metody pasują do podpisu delegata ParameterizedThreadStart , czyli mają jeden parametr typu Object i nie zwracają wartości.
Uwaga
Kompilatory Visual Basic i C# wywnioskują ParameterizedThreadStart delegata z podpisów DoWork
metod i DoMoreWork
i i wywołają prawidłowy konstruktor. W związku z tym w kodzie nie ma jawnego wywołania konstruktora.
using namespace System;
using namespace System::Threading;
namespace SystemThreadingExample
{
public ref class Work
{
public:
void StartThreads()
{
// Start a thread that calls a parameterized static method.
Thread^ newThread = gcnew
Thread(gcnew ParameterizedThreadStart(Work::DoWork));
newThread->Start(42);
// Start a thread that calls a parameterized instance method.
Work^ someWork = gcnew Work;
newThread = gcnew Thread(
gcnew ParameterizedThreadStart(someWork,
&Work::DoMoreWork));
newThread->Start("The answer.");
}
static void DoWork(Object^ data)
{
Console::WriteLine("Static thread procedure. Data='{0}'",
data);
}
void DoMoreWork(Object^ data)
{
Console::WriteLine("Instance thread procedure. Data='{0}'",
data);
}
};
}
//Entry point of example application
int main()
{
SystemThreadingExample::Work^ samplework =
gcnew SystemThreadingExample::Work();
samplework->StartThreads();
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
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.'
Uwagi
Po utworzeniu zarządzanego wątku metoda wykonywana w wątku jest reprezentowana przez:
Delegat ThreadStart przekazany do konstruktora Thread.Thread(ThreadStart) . Każda metoda, która nie ma parametrów i która zwraca
void
wartość w języku C# lub jest procedurąSub
w Visual Basic może reprezentować delegata.Delegat ParameterizedThreadStart przekazany do konstruktora Thread.Thread(ParameterizedThreadStart) . Każda metoda, która ma jeden parametr typu Object i która zwraca wartość void w języku C# lub jest procedurą podrzędną w Visual Basic może reprezentować delegata.
Wątek nie rozpoczyna wykonywania, dopóki Thread.Start metoda nie zostanie wywołana. Delegat ThreadStart lub ParameterizedThreadStart jest wywoływany w wątku, a wykonanie rozpoczyna się od pierwszego wiersza metody reprezentowanej przez delegata. W przypadku delegata ParameterizedThreadStart obiekt przekazany do Start(Object) metody jest przekazywany do delegata.
Uwaga
Visual Basic i użytkownicy języka C# mogą pominąć ThreadStart konstruktora lub ParameterizedThreadStart delegata podczas tworzenia wątku. W Visual Basic użyj AddressOf
operatora podczas przekazywania metody do konstruktoraThread, Dim t As New Thread(AddressOf ThreadProc)
na przykład . W języku C# po prostu określ nazwę procedury wątku. Kompilator wybiera prawidłowy konstruktor delegata.
Uwaga
Podczas tworzenia delegata ParameterizedThreadStart dla metody wystąpienia w języku C++, pierwszym parametrem konstruktora jest zmienna wystąpienia. W przypadku metody statycznej pierwszy parametr konstruktora ma wartość zero. W przypadku metody statycznej konstruktor delegata wymaga tylko jednego parametru: adresu metody wywołania zwrotnego kwalifikowanego przez nazwę klasy.
Delegat ParameterizedThreadStart i Thread.Start(Object) przeciążenie metody ułatwiają przekazywanie danych do procedury wątku, ale ta technika nie jest bezpieczna, ponieważ do dowolnego obiektu można przekazać Thread.Start(Object)obiekt . Bardziej niezawodnym sposobem przekazywania danych do procedury wątku jest umieszczenie zarówno procedury wątku, jak i pól danych w obiekcie procesu roboczego. Aby uzyskać więcej informacji, zobacz Tworzenie wątków i przekazywanie danych w czasie rozpoczęcia.
Delegat ParameterizedThreadStart obsługuje tylko jeden parametr. Możesz przekazać wiele elementów danych do elementu ParameterizedThreadStart , tworząc jeden z następujących parametrów:
Tablicy.
Typ kolekcji, jeśli wszystkie elementy danych są tego samego typu.
Typ krotki, taki jak Tuple<T1,T2> lub Tuple<T1,T2,T3,T4>.
Metody rozszerzania
GetMethodInfo(Delegate) |
Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata. |