Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Delegado ParameterizedThreadStart

 

Publicado: noviembre de 2016

Representa el método que se ejecuta en Thread.

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

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

Parámetros

obj
Type: System::Object^

Objeto que contiene datos para el procedimiento de subproceso.

Cuando se crea un subproceso administrado, el método que se ejecuta en el subproceso se representa mediante:

  • A ThreadStart delegado que se pasa a la Thread::Thread(ThreadStart^) constructor. Cualquier método que no tiene parámetros y que devuelve void en C# o es una Sub procedimiento en Visual Basic puede representar el delegado.

  • A ParameterizedThreadStart delegado que se pasa a la Thread::Thread(ParameterizedThreadStart^, Int32) constructor. Cualquier método que tiene un único parámetro de tipo Object y devuelve un valor nulo en C# o no es un procedimiento Sub en Visual Basic puede representar el delegado.

El subproceso no comienza a ejecutarse hasta que el Thread::Start se llama al método. El ThreadStart o ParameterizedThreadStart delegado se invoca en el subproceso y comienza la ejecución en la primera línea del método representado por el delegado. En el caso de los ParameterizedThreadStart delegar, el objeto que se pasa a la Start(Object^) método se pasa al delegado.

System_CAPS_noteNota

Los usuarios de Visual Basic y C# pueden omitir el ThreadStart o ParameterizedThreadStart constructor de delegado cuando se crea un subproceso. En Visual Basic, utilice la AddressOf operador cuando se pasa el método de la Thread constructor; por ejemplo, Dim t As New Thread(AddressOf ThreadProc). En C#, simplemente especifique el nombre del procedimiento de subproceso. El compilador selecciona el constructor de delegado correcto.

System_CAPS_noteNota

Cuando se crea un ParameterizedThreadStart delegado para un 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 de delegado sólo requiere un parámetro: la dirección del método de devolución de llamada, calificada por el nombre de clase.

El ParameterizedThreadStart delegar y Thread::Start(Object^) sobrecarga del método que sean fáciles de pasar datos a un procedimiento de subproceso, pero esta técnica no tiene seguridad de tipos porque puede pasar cualquier objeto a Thread::Start(Object^). Es una manera más segura para pasar datos a un procedimiento de subproceso poner el procedimiento de subproceso y los campos de datos en un objeto de trabajo. Para obtener más información, consulta Creating Threads and Passing Data at Start Time.

El ParameterizedThreadStart delegado es compatible con un solo parámetro. Puede pasar varios elementos de datos a la ParameterizedThreadStart mediante la realización de ese parámetro de uno de los siguientes:

El siguiente ejemplo de código utiliza un ParameterizedThreadStart delegar con para ejecutar un método estático y un método de instancia. La primera ParameterizedThreadStart delegado se representa mediante el método estático DoWork método y el segundo es representado por la instancia DoMoreWork método. Ambos métodos coincide con el ParameterizedThreadStart firma de delegado; es decir, tienen un único parámetro de tipo Object y no devuelve ningún valor.

System_CAPS_noteNota

Deducen de los compiladores de C# y Visual Basic la ParameterizedThreadStart delegar desde las firmas de los DoWork y DoMoreWork métodos y llame al constructor correcto. Por lo tanto, no hay ninguna llamada de constructor explícito en el código.

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.'

.NET Framework
Disponible desde 2.0
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: