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

Método ThreadPool.QueueUserWorkItem (WaitCallback, Object)

 

Publicado: octubre de 2016

Pone un método en cola para su ejecución y especifica un objeto que contiene los datos que debe usar el método. El método se ejecuta cuando hay disponible un subproceso de grupo de subprocesos.

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

Public Shared Function QueueUserWorkItem (
	callBack As WaitCallback,
	state As Object
) As Boolean

Parámetros

callBack
Type: System.Threading.WaitCallback

WaitCallback que representa el método que se va a ejecutar.

state
Type: System.Object

Objeto que contiene los datos que va a usar el método.

Valor devuelto

Type: System.Boolean

true si el método se pone en la cola correctamente; se produce la excepción NotSupportedException si el elemento de trabajo no se puede poner en la cola.

Exception Condition
NotSupportedException

Se hospeda common language runtime (CLR) y el host no admite esta acción.

ArgumentNullException

El valor de callBack es null.

Si el método de devolución de llamada requiere datos complejos, puede definir una clase para contener los datos.

System_CAPS_noteNota

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

En .NET Framework versión 2.0, la Thread.CurrentPrincipal valor de propiedad se propaga a los subprocesos de trabajo en una cola mediante el QueueUserWorkItem método. En versiones anteriores, no se propaga la información de entidad de seguridad.

En el ejemplo siguiente se muestra cómo crear un objeto que contiene información de la tarea. También muestra cómo pasar ese objeto a una tarea que se pone en cola para su ejecución por 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.
Imports System
Imports System.Threading
' TaskInfo holds state information for a task that will be
' executed by a ThreadPool thread.
Public Class TaskInfo
    ' State information for the task.  These members
    ' can be implemented as read-only properties, read/write
    ' properties with validation, and so on, as required.
    Public Boilerplate As String
    Public Value As Integer

    ' Public constructor provides an easy way to supply all
    ' the information needed for the task.
    Public Sub New(text As String, number As Integer)
        Boilerplate = text
        Value = number
    End Sub
End Class

Public Class Example

    <MTAThread> _
    Public Shared Sub Main()
        ' Create an object containing the information needed
        ' for the task.
        Dim ti As New TaskInfo("This report displays the number {0}.", 42)

        ' Queue the task and data.
        ThreadPool.QueueUserWorkItem( _
                New WaitCallback(AddressOf 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.")
    End Sub

    ' The thread procedure performs the independent task, in this case
    ' formatting and printing a very simple report.
    '
    Shared Sub ThreadProc(stateInfo As Object)
        Dim ti As TaskInfo = CType(stateInfo, TaskInfo)
        Console.WriteLine(ti.Boilerplate, ti.Value)
    End Sub
End Class
' The example displays output like the following:
'        Main thread does some work, then sleeps.
'        This report displays the number 42.
'        Main thread exits.

.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: