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

Definição

Executa um delegado de forma assíncrona no thread em que o identificador subjacente do controle foi criado.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)

Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle foi criado.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[])

Executa o delegado especificado de forma assíncrona com os argumentos especificados, no thread em que o identificador subjacente do controle foi criado.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)

Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle foi criado.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

Um delegado para um método que não tem parâmetros.A delegate to a method that takes no parameters.

Retornos

Um IAsyncResult que representa o resultado da operação BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Exceções

Não foi possível encontrar um identificador de janela apropriado.No appropriate window handle can be found.

Exemplos

O exemplo de código a seguir demonstra um uso BeginInvoke do 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

Comentários

O delegado é chamado de forma assíncrona e esse método retorna imediatamente.The delegate is called asynchronously, and this method returns immediately. Você pode chamar esse método de qualquer thread, até mesmo o thread que possui o identificador do controle.You can call this method from any thread, even the thread that owns the control's handle. Se o identificador do controle ainda não existir, esse método pesquisará a cadeia pai do controle até encontrar um controle ou formulário que tenha um identificador de janela.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. Se nenhum identificador apropriado puder ser encontrado, BeginInvoke o gerará uma exceção.If no appropriate handle can be found, BeginInvoke will throw an exception. Exceções dentro do método delegate são consideradas não interceptadas e serão enviadas para o manipulador de exceção não interceptado do aplicativo.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Você pode chamar EndInvoke para recuperar o valor de retorno do delegado, se necessária, mas isso não for necessário.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvokeserá bloqueado até que o valor de retorno possa ser recuperado.EndInvoke will block until the return value can be retrieved.

Observação

A maioria dos métodos em um controle só pode ser chamada a partir do thread em que o controle foi criado.Most methods on a control can only be called from the thread where the control was created. Além InvokeRequired da propriedade, há quatro métodos em um controle que são thread-safe: Invoke, BeginInvoke, EndInvokee CreateGraphics se o identificador do controle já foi criado.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. Chamar CreateGraphics antes de o identificador do controle ter sido criado em um thread em segundo plano pode causar chamadas ilegais entre threads.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Para todas as outras chamadas de método, você deve usar um dos métodos Invoke para realizar marshaling da chamada para o thread do controle.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Os métodos Invoke sempre invocam seus retornos de chamada no thread do controle.The invoke methods always invoke their callbacks on the control's thread.

Observação

Uma exceção poderá ser gerada se o thread que deve processar a mensagem não estiver mais ativo.An exception might be thrown if the thread that should process the message is no longer active.

Segurança

SecurityPermission
para que o chamador imediato chame código não gerenciado.for the immediate caller to call unmanaged code. Enumeração associada: UnmanagedCodeAssociated enumeration: UnmanagedCode

Veja também

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

Executa o delegado especificado de forma assíncrona com os argumentos especificados, no thread em que o identificador subjacente do controle foi criado.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

Um delegado para um método que usa parâmetros do mesmo número e tipo contidos no 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[]

Uma matriz de objetos a serem passados como argumentos para o método em questão.An array of objects to pass as arguments to the given method. Pode ser null, caso nenhum argumento seja necessário.This can be null if no arguments are needed.

Retornos

Um IAsyncResult que representa o resultado da operação BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Implementações

Exceções

Não foi possível encontrar um identificador de janela apropriado.No appropriate window handle can be found.

Exemplos

O exemplo de código a seguir demonstra um uso BeginInvoke do 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

Comentários

O delegado é chamado de forma assíncrona e esse método retorna imediatamente.The delegate is called asynchronously, and this method returns immediately. Você pode chamar esse método de qualquer thread, até mesmo o thread que possui o identificador do controle.You can call this method from any thread, even the thread that owns the control's handle. Se o identificador do controle ainda não existir, esse método pesquisará a cadeia pai do controle até encontrar um controle ou formulário que tenha um identificador de janela.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. Se nenhum identificador apropriado puder ser encontrado, BeginInvoke o gerará uma exceção.If no appropriate handle can be found, BeginInvoke will throw an exception. Exceções dentro do método delegate são consideradas não interceptadas e serão enviadas para o manipulador de exceção não interceptado do aplicativo.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Você pode chamar EndInvoke para recuperar o valor de retorno do delegado, se necessária, mas isso não for necessário.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvokeserá bloqueado até que o valor de retorno possa ser recuperado.EndInvoke will block until the return value can be retrieved.

Observação

A maioria dos métodos em um controle só pode ser chamada a partir do thread em que o controle foi criado.Most methods on a control can only be called from the thread where the control was created. Além InvokeRequired da propriedade, há quatro métodos em um controle que são thread-safe: Invoke, BeginInvoke, EndInvokee CreateGraphics se o identificador do controle já foi criado.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. Chamar CreateGraphics antes de o identificador do controle ter sido criado em um thread em segundo plano pode causar chamadas ilegais entre threads.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Para todas as outras chamadas de método, você deve usar um dos métodos Invoke para realizar marshaling da chamada para o thread do controle.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Os métodos Invoke sempre invocam seus retornos de chamada no thread do controle.The invoke methods always invoke their callbacks on the control's thread.

Observação

Uma exceção poderá ser gerada se o thread que deve processar a mensagem não estiver mais ativo.An exception might be thrown if the thread that should process the message is no longer active.

Veja também

Aplica-se a