ParameterizedThreadStart Delegado
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa el método que se ejecuta en .Thread
public delegate void ParameterizedThreadStart(System::Object ^ obj);
[System.Runtime.InteropServices.ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
public delegate void ParameterizedThreadStart(object obj);
[<System.Runtime.InteropServices.ComVisible(false)>]
type ParameterizedThreadStart = delegate of obj -> unit
type ParameterizedThreadStart = delegate of obj -> unit
Public Delegate Sub ParameterizedThreadStart(obj As Object)
Parámetros
- obj
- Object
Objeto que contiene datos para el procedimiento de subproceso.
- Atributos
Ejemplos
En el ejemplo de código siguiente se usa un ParameterizedThreadStart delegado para ejecutar un método estático y un método de instancia. El primer ParameterizedThreadStart delegado se representa mediante el método estático DoWork y el segundo se representa mediante el método de instancia DoMoreWork . Ambos métodos coinciden con la ParameterizedThreadStart firma del delegado; es decir, tienen un único parámetro de tipo Object y no devuelven un valor.
Note
Los compiladores de Visual Basic y C# deducen el delegado de
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.'
Comentarios
Cuando se crea un subproceso administrado, el método que se ejecuta en el subproceso se representa mediante:
ThreadStart Delegado que se pasa al Thread.Thread(ThreadStart) constructor. Cualquier método que no tenga parámetros y que devuelva
voiden C# o es un procedimientoSuben Visual Basic puede representar el delegado.ParameterizedThreadStart Delegado que se pasa al Thread.Thread(ParameterizedThreadStart) constructor. Cualquier método que tenga un único parámetro de tipo Object y que devuelva void en C# o sea un procedimiento Sub en Visual Basic puede representar el delegado.
El subproceso no comienza a ejecutarse hasta que se llama al Thread.Start método . El ThreadStart delegado o ParameterizedThreadStart se invoca en el subproceso y la ejecución comienza en la primera línea del método representado por el delegado. En el caso del ParameterizedThreadStart delegado, el objeto que se pasa al Start(Object) método se pasa al delegado.
Note
Visual Basic y los usuarios de C# pueden omitir el constructor delegado de ThreadStart o ParameterizedThreadStart al crear un subproceso. En Visual Basic, use el operador AddressOf al pasar el método al constructor /Thread; por ejemplo, Dim t As New Thread(AddressOf ThreadProc). En C#, simplemente especifique el nombre del procedimiento de subproceso. El compilador selecciona el constructor delegado correcto.
Note
Cuando se crea un delegado para un ParameterizedThreadStart método de instancia en C++, el primer parámetro del constructor es la variable de instancia. Para un método estático, el primer parámetro del constructor es cero. Para un método estático, el constructor delegado solo requiere un parámetro: la dirección del método de devolución de llamada, calificado por el nombre de clase.
El ParameterizedThreadStart delegado y la sobrecarga del Thread.Start(Object) método facilitan el paso de datos a un procedimiento de subproceso, pero esta técnica no es segura para tipos porque cualquier objeto se puede pasar a Thread.Start(Object). Una manera más sólida de pasar datos a un procedimiento de subproceso es colocar tanto el procedimiento de subproceso como los campos de datos en un objeto de trabajo. Para obtener más información, vea Crear subprocesos y pasar datos a la hora de inicio.
El ParameterizedThreadStart delegado solo admite un único parámetro. Puede pasar varios elementos de datos a ParameterizedThreadStart haciendo que ese parámetro sea uno de los siguientes:
- Una matriz.
- Un tipo de colección, si todos los elementos de datos tienen el mismo tipo.
- Tipo de tupla, como Tuple<T1,T2> o Tuple<T1,T2,T3,T4>.
Métodos de extensión
| Nombre | Description |
|---|---|
| GetMethodInfo(Delegate) |
Obtiene un objeto que representa el método representado por el delegado especificado. |