Exportar (0) Imprimir
Expandir todo
Expandir Minimizar
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

WaitCallback (Delegado)

Representa un método de devolución de llamada que debe ejecutar un subproceso del grupo de subprocesos.

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

[ComVisibleAttribute(true)]
public delegate void WaitCallback(
	Object^ state
)

Parámetros

state
Tipo: System::Object
Objeto que contiene la información que va a utilizar el método de devolución de llamada.

WaitCallback representa un método de devolución de llamada que se desea ejecutar en un subproceso de ThreadPool. Para crear el delegado, hay que pasar el método de devolución de llamada al constructor WaitCallback. El método debe tener la firma que se muestra aquí.

Ponga la tarea en la cola para que se ejecute, pasando el delegado de WaitCallback a ThreadPool::QueueUserWorkItem. El método de devolución de llamada se ejecuta cuando hay un subproceso de grupo de subprocesos disponible.

[Visual Basic]

NotaNota

Los usuarios de Visual Basic pueden omitir el constructor WaitCallback y utilizar simplemente el operador AddressOf al pasar el método de devolución de llamadas a QueueUserWorkItem. Visual Basic llama automáticamente al constructor del delegado correcto.

Si desea pasar información al método de devolución de llamada, cree un objeto con la información necesaria y páselo a QueueUserWorkItem al poner la tarea en cola para su ejecución. Cada vez que se ejecuta el método de devolución de llamadas, el parámetro state contiene este objeto.

Para obtener más información sobre cómo utilizar devoluciones de llamadas para sincronizar subprocesos de grupo de subprocesos, vea Grupo de subprocesos administrados.

Esta sección incluye dos ejemplos. El primer ejemplo muestra cómo puede poner en cola una tarea simple para la ejecución ThreadPool.

El segundo ejemplo muestra cómo puede poner en cola una tarea y pasar información a ella.

Ejemplo 1

Este ejemplo muestra cómo utilizar el delegado WaitCallback para poner en cola una tarea para su ejecución ThreadPool. El ejemplo de código usa la sobrecarga del método ThreadPool::QueueUserWorkItem(WaitCallback) para poner en cola una tarea, representada mediante un objeto WaitCallback que ajusta el método ThreadProc, para su ejecución cuando esté disponible un subproceso. Con esta sobrecarga no se facilita ningún tipo de información de la tarea. Por consiguiente, la información que está disponible para el método ThreadProc se limita al objeto al que pertenece.


using namespace System;
using namespace System::Threading;
ref class Example
{
public:

   // This thread procedure performs the task.
   static void ThreadProc( Object^ stateInfo )
   {

      // No state object was passed to QueueUserWorkItem, so 
      // stateInfo is 0.
      Console::WriteLine( "Hello from the thread pool." );
   }

};

int main()
{

   // Queue the task.
   ThreadPool::QueueUserWorkItem( gcnew WaitCallback( Example::ThreadProc ) );
   Console::WriteLine( "Main thread does some work, then sleeps." );

   // If you comment out the Sleep, the main thread exits before
   // the thread pool task runs.  The thread pool uses background
   // threads, which do not keep the application running.  (This
   // is a simple example of a race condition.)
   Thread::Sleep( 1000 );
   Console::WriteLine( "Main thread exits." );
   return 0;
}



Ejemplo 2

Este ejemplo muestra cómo crear un objeto que contiene información de la tarea. También se muestra cómo pasar ese objeto a una tarea que se pone en la cola para que la ejecute el grupo de subprocesos.


// This example shows how to create an Object* containing task
// information, and pass that Object* to a task queued for
// execution by the thread pool.
using namespace System;
using namespace System::Threading;

// TaskInfo holds state information for a task that will be
// executed by a ThreadPool thread.
public ref class TaskInfo
{
public:

   // State information for the task.  These members
   // can be implemented as read-only properties, read/write
   // properties with validation, and so on, as required.
   String^ Boilerplate;
   int Value;

   // Public constructor provides an easy way to supply all
   // the information needed for the task.
   TaskInfo( String^ text, int number )
   {
      Boilerplate = text;
      Value = number;
   }

};

public ref struct Example
{
public:

   // The thread procedure performs the independent task, in this case
   // formatting and printing a very simple report.
   //
   static void ThreadProc( Object^ stateInfo )
   {
      TaskInfo^ ti = dynamic_cast<TaskInfo^>(stateInfo);
      Console::WriteLine( ti->Boilerplate, ti->Value );
   }

};

void main()
{

   // Create an object containing the information needed
   // for the task.
   TaskInfo^ ti = gcnew TaskInfo( "This report displays the number {0}.",42 );

   // Queue the task and data.
   ThreadPool::QueueUserWorkItem( gcnew WaitCallback( Example::ThreadProc ), ti );

   Console::WriteLine( "Main thread does some work, then sleeps." );

   // If you comment out the Sleep, the main thread exits before
   // the ThreadPool task has a chance to run.  ThreadPool uses 
   // background threads, which do not keep the application 
   // running.  (This is a simple example of a race condition.)
   Thread::Sleep( 1000 );
   Console::WriteLine( "Main thread exits." );
}



.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

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

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft