Control.BeginInvoke Método

Definição

Executa um delegado de forma assíncrona no thread onde o handle subjacente do controlo foi criado.

Sobrecargas

Name Description
BeginInvoke(Delegate)

Executa o delegado especificado de forma assíncrona no thread onde o handle subjacente do controlo foi criado.

BeginInvoke(Delegate, Object[])

Executa o delegado especificado de forma assíncrona com os argumentos especificados, no thread onde o handle subjacente do controlo foi criado.

BeginInvoke(Delegate)

Executa o delegado especificado de forma assíncrona no thread onde o handle subjacente do controlo foi criado.

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

Um delegado a um método que não utiliza parâmetros.

Devoluções

Um IAsyncResult que representa o resultado da BeginInvoke(Delegate) operação.

Exceções

Não se encontra nenhuma maçaneta adequada para a janela.

Exemplos

O seguinte exemplo de código demonstra a utilização do 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

Observações

O delegado é chamado assíncrono, e este método retorna imediatamente. Podes chamar este método a partir de qualquer thread, até mesmo da thread que detém o handle do controlo. Se o handle do controlo ainda não existir, este método pesquisa a cadeia pai do controlo até encontrar um controlo ou formulário que tenha um handle de janela. Se não for encontrado um handle apropriado, BeginInvoke lança-se uma exceção. Exceções dentro do método delegate são consideradas untraped e serão enviadas para o handler de exceções untraped da aplicação.

Pode ligar EndInvoke para recuperar o valor de retorno do delegado, se necessário, mas isso não é obrigatório. EndInvoke irá bloquear até que o valor de retorno possa ser recuperado.

Note

A maioria dos métodos num controlo só pode ser chamada a partir do thread onde o controlo foi criado. Além da InvokeRequired propriedade, existem quatro métodos num controlo que são seguros contra thread: Invoke, BeginInvoke, EndInvoke, e CreateGraphics se a alavanca do controlo já tiver sido criada. Chamar CreateGraphics antes de o handle do controlo ter sido criado numa thread em segundo plano pode causar chamadas ilegais de cross thread. Para todas as outras chamadas de método, deve usar um dos métodos invoke para fazer marshal da chamada para o thread do controlo. Os métodos de invocação invocam sempre os seus callbacks no thread do controlo.

Note

Pode ser lançada uma exceção se o thread que deveria processar a mensagem deixar de estar ativo.

Ver também

Aplica-se a

BeginInvoke(Delegate, Object[])

Executa o delegado especificado de forma assíncrona com os argumentos especificados, no thread onde o handle subjacente do controlo foi criado.

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

Um delegado a um método que toma parâmetros do mesmo número e tipo que estão contidos no args parâmetro.

args
Object[]

Um array de objetos para passar como argumentos ao método dado. Isto pode acontecer null se não forem necessários argumentos.

Devoluções

Um IAsyncResult que representa o resultado da BeginInvoke(Delegate) operação.

Implementações

Exceções

Não se encontra nenhuma maçaneta adequada para a janela.

Exemplos

O seguinte exemplo de código demonstra a utilização do 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

Observações

O delegado é chamado assíncrono, e este método retorna imediatamente. Podes chamar este método a partir de qualquer thread, até mesmo da thread que detém o handle do controlo. Se o handle do controlo ainda não existir, este método pesquisa a cadeia pai do controlo até encontrar um controlo ou formulário que tenha um handle de janela. Se não for encontrado um handle apropriado, BeginInvoke lança-se uma exceção. Exceções dentro do método delegate são consideradas untraped e serão enviadas para o handler de exceções untraped da aplicação.

Pode ligar EndInvoke para recuperar o valor de retorno do delegado, se necessário, mas isso não é obrigatório. EndInvoke irá bloquear até que o valor de retorno possa ser recuperado.

Note

A maioria dos métodos num controlo só pode ser chamada a partir do thread onde o controlo foi criado. Além da InvokeRequired propriedade, existem quatro métodos num controlo que são seguros contra thread: Invoke, BeginInvoke, EndInvoke, e CreateGraphics se a alavanca do controlo já tiver sido criada. Chamar CreateGraphics antes de o handle do controlo ter sido criado numa thread em segundo plano pode causar chamadas ilegais de cross thread. Para todas as outras chamadas de método, deve usar um dos métodos invoke para fazer marshal da chamada para o thread do controlo. Os métodos de invocação invocam sempre os seus callbacks no thread do controlo.

Note

Pode ser lançada uma exceção se o thread que deveria processar a mensagem deixar de estar ativo.

Ver também

Aplica-se a