Control.BeginInvoke Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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
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
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.