¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.
Traducción
Original

ParameterizedThreadStart (Delegado)

Representa el método que se ejecuta en una clase Thread.

Espacio de nombres:  System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(false)]
public delegate void ParameterizedThreadStart(
	Object obj
)

Parámetros

obj
Tipo: System.Object
Objeto que contiene los datos para el procedimiento de subproceso.

Cuando se crea un subproceso administrado, un delegado ThreadStart o ParameterizedThreadStart que se pasa al constructor Thread representa al método que se ejecuta en el subproceso. El subproceso no comienza a ejecutarse hasta que se llama al método Thread.Start. Se invoca al delegado ThreadStart o ParameterizedThreadStart en el subproceso y comienza la ejecución en la primera línea del método representado por el delegado. En el caso del delegado ParameterizedThreadStart, el objeto que se pasa al método Start(Object) se pasa al delegado.

NotaNota

Los usuarios de Visual Basic y C# pueden omitir el constructor del delegado ThreadStart o ParameterizedThreadStart al crear un subproceso. En Visual Basic, al pasar el método al constructor Thread se debe utilizar el operador AddressOf, por ejemplo Dim t As New Thread(AddressOf ThreadProc). En C#, basta con especificar el nombre del procedimiento de subproceso. El compilador selecciona el constructor del delegado correcto.

NotaNota

Cuando se crea un delegado ParameterizedThreadStart para el método de una instancia en C++, el primer parámetro del constructor es la variable de la instancia. Para un método estático, el primer parámetro del constructor es cero. Para un método estático, el constructor del delegado sólo requiere un parámetro: la dirección del método de devolución de llamada, calificada con el nombre de clase.

El delegado ParameterizedThreadStart y la sobrecarga del método Thread.Start(Object) facilitan el paso de los datos a un procedimiento de subproceso, pero esta técnica carece de seguridad de tipos puesto que se puede pasar cualquier objeto a Thread.Start(Object). Una forma más segura de pasar los datos a un procedimiento de subproceso es colocarlo junto con los campos de datos en un objeto de trabajo. Para obtener más información, vea Crear subprocesos y analizar los datos en el inicio.

En el ejemplo de código siguiente se muestra la sintaxis para crear y utilizar un delegado ParameterizedThreadStart con un método estático y un método de instancia.

NotaNota

Los compiladores de C# y Visual Basic deducen el delegado ParameterizedThreadStart de las firmas de los métodos DoMoreWork y DoWork y llaman al constructor correcto. Por lo tanto, no hay ninguna llamada de constructor explícita en el código.


using System;
using System.Threading;

public class Work
{
    public static void Main()
    {
        // To start a thread using a shared thread procedure, use
        // the class name and method name when you create the 
        // ParameterizedThreadStart delegate. C# infers the 
        // appropriate delegate creation syntax:
        //    new ParameterizedThreadStart(Work.DoWork)
        //
        Thread newThread = new Thread(Work.DoWork);

        // Use the overload of the Start method that has a
        // parameter of type Object. You can create an object that
        // contains several pieces of data, or you can pass any 
        // reference type or value type. The following code passes
        // the integer value 42.
        //
        newThread.Start(42);

        // To start a thread using an instance method for the thread 
        // procedure, use the instance variable and method name when 
        // you create the ParameterizedThreadStart delegate. C# infers 
        // the appropriate delegate creation syntax:
        //    new ParameterizedThreadStart(w.DoMoreWork)
        //
        Work w = new Work();
        newThread = new Thread(w.DoMoreWork);

        // Pass an object containing data for the thread.
        //
        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 code example produces the following output (the order 
   of the lines might vary):

Static thread procedure. Data='42'
Instance thread procedure. Data='The answer'
*/


.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

date

Historial

Motivo

Septiembre de 2010

Aclarado que el ejemplo utiliza ParameterizedThreadStart.

Comentarios de los clientes.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft