ParameterizedThreadStart Delegera
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar metoden som körs på en 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)
Parametrar
- obj
- Object
Ett objekt som innehåller data för trådproceduren.
- Attribut
Exempel
I följande kodexempel används ett ParameterizedThreadStart ombud för att köra en statisk metod och en instansmetod. Det första ParameterizedThreadStart ombudet representeras av den statiska DoWork metoden och den andra representeras av instansmetoden DoMoreWork . Båda metoderna matchar ombudssignaturen ParameterizedThreadStart . De har alltså en enda parameter av typen Object och returnerar inte något värde.
Note
Kompilatorerna Visual Basic och C# härleder ParameterizedThreadStart-ombudet från signaturerna för metoderna DoWork och DoMoreWork och anropar rätt konstruktor. Därför finns det inget explicit konstruktoranrop i koden.
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.'
Kommentarer
När en hanterad tråd skapas representeras metoden som körs på tråden av:
Ett ThreadStart ombud som skickas till Thread.Thread(ThreadStart) konstruktorn. Alla metoder som inte har några parametrar och som returnerar
voidi C# eller är enSub-procedur i Visual Basic kan representera ombudet.Ett ParameterizedThreadStart ombud som skickas till Thread.Thread(ParameterizedThreadStart) konstruktorn. Alla metoder som har en enskild parameter av typen Object och som returnerar void i C# eller är en underprocedur i Visual Basic kan representera ombudet.
Tråden börjar inte köras förrän Thread.Start metoden anropas. Eller-ombudet ThreadStartParameterizedThreadStart anropas i tråden och körningen börjar på den första raden i metoden som representeras av ombudet. När det gäller ombudet ParameterizedThreadStart skickas objektet som skickas till Start(Object) metoden till ombudet.
Note
Visual Basic- och C#-användare kan utelämna ThreadStart eller ParameterizedThreadStart delegera konstruktorn när du skapar en tråd. I Visual Basic använder du operatorn AddressOf när du skickar metoden till konstruktorn Thread, till exempel Dim t As New Thread(AddressOf ThreadProc). I C# anger du bara namnet på trådproceduren. Kompilatorn väljer rätt ombudskonstruktor.
Note
När du skapar ett ParameterizedThreadStart ombud för en instansmetod i C++, är den första parametern för konstruktorn instansvariabeln. För en statisk metod är konstruktorns första parameter noll. För en statisk metod kräver ombudskonstruktorn endast en parameter: adressen till motringningsmetoden, som kvalificerats av klassnamnet.
Ombudet ParameterizedThreadStart och metodöverlagringen Thread.Start(Object) gör det enkelt att skicka data till en trådprocedur, men den här tekniken är inte typsäker eftersom alla objekt kan skickas till Thread.Start(Object). Ett mer robust sätt att skicka data till en trådprocedur är att placera både trådproceduren och datafälten i ett arbetsobjekt. Mer information finns i Skapa trådar och skicka data vid starttid.
Ombudet ParameterizedThreadStart stöder endast en enskild parameter. Du kan skicka flera dataobjekt till genom att göra parametern till ParameterizedThreadStart något av följande:
- En matris.
- En samlingstyp, om alla dataobjekt är av samma typ.
- En tuppelns typ, till exempel Tuple<T1,T2> eller Tuple<T1,T2,T3,T4>.
Tilläggsmetoder
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Hämtar ett objekt som representerar den metod som representeras av det angivna ombudet. |