Control.BeginInvoke Control.BeginInvoke Control.BeginInvoke Control.BeginInvoke Method

Definición

Ejecuta un delegado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.Executes a delegate asynchronously on the thread that the control's underlying handle was created on.

Sobrecargas

BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[])

Ejecuta el delegado especificado de forma asincrónica con los argumentos especificados en el subproceso donde se creó el identificador subyacente del control.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate) BeginInvoke(Delegate)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

public:
 IAsyncResult ^ BeginInvoke(Delegate ^ method);
public IAsyncResult BeginInvoke (Delegate method);
member this.BeginInvoke : Delegate -> IAsyncResult
Public Function BeginInvoke (method As Delegate) As IAsyncResult

Parámetros

method
Delegate Delegate Delegate Delegate

Delegado de un método que no toma parámetros.A delegate to a method that takes no parameters.

Devoluciones

Una IAsyncResult que representa el resultado de la operación BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Excepciones

No se puede encontrar ningún identificador de ventana adecuado.No appropriate window handle can be found.

Ejemplos

En el ejemplo de código siguiente se muestra el BeginInvoke uso del método.The following code example demonstrates a use of the BeginInvoke method.

private:
   void Invoke_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      myTextBox->BeginInvoke( gcnew InvokeDelegate( this, &MyForm::InvokeMethod ) );
   }

   void InvokeMethod()
   {
      myTextBox->Text = "Executed the given delegate";
   }
public delegate void InvokeDelegate();

private void Invoke_Click(object sender, EventArgs e)
{
   myTextBox.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
   myTextBox.Text = "Executed the given delegate";
}
Delegate Sub InvokeDelegate()

Private Sub Invoke_Click(sender As Object, e As EventArgs)
   myTextBox.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))
End Sub

Public Sub InvokeMethod()
   myTextBox.Text = "Executed the given delegate"
End Sub

Comentarios

Se llama al delegado de forma asincrónica y este método vuelve inmediatamente.The delegate is called asynchronously, and this method returns immediately. Puede llamar a este método desde cualquier subproceso, incluso con el subproceso que posee el identificador del control.You can call this method from any thread, even the thread that owns the control's handle. Si el identificador del control no existe todavía, este método busca en la cadena primaria del control hasta que encuentra un control o formulario que tiene un identificador de ventana.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. Si no se encuentra ningún identificador adecuado, BeginInvoke producirá una excepción.If no appropriate handle can be found, BeginInvoke will throw an exception. Las excepciones dentro del método delegado se consideran no interceptadas y se enviarán al controlador de excepciones no interceptadas de la aplicación.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Puede llamar EndInvoke a para recuperar el valor devuelto del delegado, si necesarios, pero esto no es necesario.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvokese bloqueará hasta que se pueda recuperar el valor devuelto.EndInvoke will block until the return value can be retrieved.

Nota

La mayoría de los métodos de un control solo se pueden llamar desde el subproceso donde se creó el control.Most methods on a control can only be called from the thread where the control was created. Además de InvokeRequired la propiedad, hay cuatro métodos en un control que son seguros para subprocesos Invoke: BeginInvoke, EndInvoke, y CreateGraphics si ya se ha creado el identificador del control.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. La CreateGraphics llamada a antes de que el identificador del control se haya creado en un subproceso en segundo plano puede producir llamadas cruzadas no válidas.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Para todas las demás llamadas al método, debe usar uno de los métodos de invocación para calcular las referencias de la llamada al subproceso del control.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Los métodos de invocación siempre invocan sus devoluciones de llamada en el subproceso del control.The invoke methods always invoke their callbacks on the control's thread.

Nota

Podría producirse una excepción si el subproceso que debería procesar el mensaje ya no está activo.An exception might be thrown if the thread that should process the message is no longer active.

Seguridad

SecurityPermission
para que el llamador inmediato llame a código no administrado.for the immediate caller to call unmanaged code. Enumeración asociada:UnmanagedCodeAssociated enumeration: UnmanagedCode

Consulte también:

BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[]) BeginInvoke(Delegate, Object[])

Ejecuta el delegado especificado de forma asincrónica con los argumentos especificados en el subproceso donde se creó el identificador subyacente del control.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, cli::array <System::Object ^> ^ args);
public IAsyncResult BeginInvoke (Delegate method, object[] args);
abstract member BeginInvoke : Delegate * obj[] -> IAsyncResult
override this.BeginInvoke : Delegate * obj[] -> IAsyncResult
Public Function BeginInvoke (method As Delegate, args As Object()) As IAsyncResult

Parámetros

method
Delegate Delegate Delegate Delegate

Delegado de un método que obtiene los parámetros del mismo número y tipo que los incluidos en el parámetro args.A delegate to a method that takes parameters of the same number and type that are contained in the args parameter.

args
Object[]

Matriz de objetos cuyos valores se pasan como argumentos al método especificado.An array of objects to pass as arguments to the given method. Puede ser null si no se necesita ningún argumento.This can be null if no arguments are needed.

Devoluciones

Una IAsyncResult que representa el resultado de la operación BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Implementaciones

Excepciones

No se puede encontrar ningún identificador de ventana adecuado.No appropriate window handle can be found.

Ejemplos

En el ejemplo de código siguiente se muestra el BeginInvoke uso del método.The following code example demonstrates a use of the BeginInvoke method.

private:
   delegate void MyDelegate(
   Label^ myControl, String^ myArg2 );
   void Button_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      array<Object^>^myArray = gcnew array<Object^>(2);
      myArray[ 0 ] = gcnew Label;
      myArray[ 1 ] = "Enter a Value";
      myTextBox->BeginInvoke( gcnew MyDelegate( this, &MyForm::DelegateMethod ), myArray );
   }

   void DelegateMethod( Label^ myControl, String^ myCaption )
   {
      myControl->Location = Point(16,16);
      myControl->Size = System::Drawing::Size( 80, 25 );
      myControl->Text = myCaption;
      this->Controls->Add( myControl );
   }

   delegate void InvokeDelegate();
public delegate void MyDelegate(Label myControl, string myArg2);

private void Button_Click(object sender, EventArgs e)
{
   object[] myArray = new object[2];

   myArray[0] = new Label();
   myArray[1] = "Enter a Value";
   myTextBox.BeginInvoke(new MyDelegate(DelegateMethod), myArray);
}

public void DelegateMethod(Label myControl, string myCaption)
{
   myControl.Location = new Point(16,16);
   myControl.Size = new Size(80, 25);
   myControl.Text = myCaption;
   this.Controls.Add(myControl);
}
Delegate Sub MyDelegate(myControl As Label, myArg2 As String)

Private Sub Button_Click(sender As Object, e As EventArgs)
   Dim myArray(1) As Object
   
   myArray(0) = New Label()
   myArray(1) = "Enter a Value"
   myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)
End Sub

Public Sub DelegateMethod(myControl As Label, myCaption As String)
   myControl.Location = New Point(16, 16)
   myControl.Size = New Size(80, 25)
   myControl.Text = myCaption
   Me.Controls.Add(myControl)
End Sub

Comentarios

Se llama al delegado de forma asincrónica y este método vuelve inmediatamente.The delegate is called asynchronously, and this method returns immediately. Puede llamar a este método desde cualquier subproceso, incluso con el subproceso que posee el identificador del control.You can call this method from any thread, even the thread that owns the control's handle. Si el identificador del control no existe todavía, este método busca en la cadena primaria del control hasta que encuentra un control o formulario que tiene un identificador de ventana.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. Si no se encuentra ningún identificador adecuado, BeginInvoke producirá una excepción.If no appropriate handle can be found, BeginInvoke will throw an exception. Las excepciones dentro del método delegado se consideran no interceptadas y se enviarán al controlador de excepciones no interceptadas de la aplicación.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Puede llamar EndInvoke a para recuperar el valor devuelto del delegado, si necesarios, pero esto no es necesario.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvokese bloqueará hasta que se pueda recuperar el valor devuelto.EndInvoke will block until the return value can be retrieved.

Nota

La mayoría de los métodos de un control solo se pueden llamar desde el subproceso donde se creó el control.Most methods on a control can only be called from the thread where the control was created. Además de InvokeRequired la propiedad, hay cuatro métodos en un control que son seguros para subprocesos Invoke: BeginInvoke, EndInvoke, y CreateGraphics si ya se ha creado el identificador del control.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. La CreateGraphics llamada a antes de que el identificador del control se haya creado en un subproceso en segundo plano puede producir llamadas cruzadas no válidas.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Para todas las demás llamadas al método, debe usar uno de los métodos de invocación para calcular las referencias de la llamada al subproceso del control.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Los métodos de invocación siempre invocan sus devoluciones de llamada en el subproceso del control.The invoke methods always invoke their callbacks on the control's thread.

Nota

Podría producirse una excepción si el subproceso que debería procesar el mensaje ya no está activo.An exception might be thrown if the thread that should process the message is no longer active.

Consulte también:

Se aplica a