Compartir a través de


Control.BeginInvoke Método

Definición

Ejecuta un delegado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.

Sobrecargas

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.

BeginInvoke(Action)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.

BeginInvoke(Delegate)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.

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.

public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, cli::array <System::Object ^> ^ args);
public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, ... cli::array <System::Object ^> ^ args);
public IAsyncResult BeginInvoke (Delegate method, object[] args);
public IAsyncResult BeginInvoke (Delegate method, params 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
Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As IAsyncResult

Parámetros

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

args
Object[]

Matriz de objetos cuyos valores se pasan como argumentos al método especificado. Puede ser null si no se necesita ningún argumento.

Devoluciones

IAsyncResult

Una IAsyncResult que representa el resultado de la operación BeginInvoke(Delegate).

Implementaciones

Excepciones

No se puede encontrar ningún identificador de ventana adecuado.

Ejemplos

En el ejemplo de código siguiente se muestra un uso del BeginInvoke método .

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

El delegado se llama de forma asincrónica y este método devuelve inmediatamente. Puede llamar a este método desde cualquier subproceso, incluso el subproceso que posee el identificador del control. Si el identificador del control aún no existe, este método busca en la cadena primaria del control hasta que encuentre un control o formulario que tenga un identificador de ventana. Si no se encuentra ningún identificador adecuado, BeginInvoke se producirá una excepción. Las excepciones dentro del método delegado se consideran sintrar y se enviarán al controlador de excepciones sintrar de la aplicación.

Puede llamar EndInvoke a para recuperar el valor devuelto del delegado, si es necesario, pero esto no es necesario. EndInvoke se bloqueará hasta que se pueda recuperar el valor devuelto.

Nota

La mayoría de los métodos de un control solo se pueden llamar desde el subproceso donde se creó el control. Además de la InvokeRequired propiedad , hay cuatro métodos en un control que son seguros para subprocesos: Invoke, BeginInvoke, EndInvokey CreateGraphics si el identificador del control ya se ha creado. Llamar CreateGraphics a antes de que se haya creado el identificador del control en un subproceso en segundo plano puede provocar llamadas entre subprocesos no válidas. Para todas las demás llamadas de método, debe usar uno de los métodos de invocación para serializar la llamada al subproceso del control. Los métodos invoke siempre invocan sus devoluciones de llamada en el subproceso del control.

Nota

Se podría producir una excepción si el subproceso que debe procesar el mensaje ya no está activo.

Consulte también

Se aplica a

BeginInvoke(Action)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.

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

Parámetros

method
Action

Delegado de un método que no toma parámetros.

Devoluciones

IAsyncResult

Una IAsyncResult que representa el resultado de la operación BeginInvoke(Action).

Se aplica a

BeginInvoke(Delegate)

Ejecuta el delegado especificado de forma asincrónica en el subproceso donde se creó el identificador subyacente del control.

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

Delegado de un método que no toma parámetros.

Devoluciones

IAsyncResult

Una IAsyncResult que representa el resultado de la operación BeginInvoke(Delegate).

Excepciones

No se puede encontrar ningún identificador de ventana adecuado.

Ejemplos

En el ejemplo de código siguiente se muestra un uso del BeginInvoke método .

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

El delegado se llama de forma asincrónica y este método devuelve inmediatamente. Puede llamar a este método desde cualquier subproceso, incluso el subproceso que posee el identificador del control. Si el identificador del control aún no existe, este método busca en la cadena primaria del control hasta que encuentre un control o formulario que tenga un identificador de ventana. Si no se encuentra ningún identificador adecuado, BeginInvoke se producirá una excepción. Las excepciones dentro del método delegado se consideran sintrar y se enviarán al controlador de excepciones sintrar de la aplicación.

Puede llamar EndInvoke a para recuperar el valor devuelto del delegado, si es necesario, pero esto no es necesario. EndInvoke se bloqueará hasta que se pueda recuperar el valor devuelto.

Nota

La mayoría de los métodos de un control solo se pueden llamar desde el subproceso donde se creó el control. Además de la InvokeRequired propiedad , hay cuatro métodos en un control que son seguros para subprocesos: Invoke, BeginInvoke, EndInvokey CreateGraphics si el identificador del control ya se ha creado. Llamar CreateGraphics a antes de que se haya creado el identificador del control en un subproceso en segundo plano puede provocar llamadas entre subprocesos no válidas. Para todas las demás llamadas de método, debe usar uno de los métodos de invocación para serializar la llamada al subproceso del control. Los métodos invoke siempre invocan sus devoluciones de llamada en el subproceso del control.

Nota

Se podría producir una excepción si el subproceso que debe procesar el mensaje ya no está activo.

Consulte también

Se aplica a