Control.BeginInvoke Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Executa um delegado de forma assíncrona no thread em que o identificador subjacente do controle foi criado.
Sobrecargas
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. |
BeginInvoke(Action) |
Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle foi criado. |
BeginInvoke(Delegate) |
Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle foi criado. |
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.
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 para um método que usa parâmetros do mesmo número e tipo contidos no parâmetro args
.
- args
- Object[]
Uma matriz de objetos a serem passados como argumentos para o método em questão. Pode ser null
, caso nenhum argumento seja necessário.
Retornos
Um IAsyncResult que representa o resultado da operação BeginInvoke(Delegate).
Implementações
Exceções
Não foi possível encontrar um identificador de janela apropriado.
Exemplos
O exemplo de código a seguir demonstra o uso 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
Comentários
O delegado é chamado de forma assíncrona e esse método retorna imediatamente. Você pode chamar esse método de qualquer thread, até mesmo o thread que possui o identificador do controle. 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. Se nenhum identificador apropriado puder ser encontrado, BeginInvoke lançará uma exceção. As exceções dentro do método delegado são consideradas não rastreadas e serão enviadas para o manipulador de exceção não mapeado do aplicativo.
Você pode chamar EndInvoke para recuperar o valor retornado do delegado, se o neccesário, mas isso não é necessário. EndInvoke será bloqueado até que o valor retornado possa ser recuperado.
Observação
A maioria dos métodos em um controle só pode ser chamada do thread em que o controle foi criado. Além da InvokeRequired propriedade, há quatro métodos em um controle que são thread safe: Invoke, e BeginInvokeEndInvokeCreateGraphics se o identificador para o controle já foi criado. Chamar CreateGraphics antes que o identificador do controle tenha sido criado em um thread em segundo plano pode causar chamadas cruzadas ilegais. Para todas as outras chamadas de método, você deve usar um dos métodos de invocação para fazer marshaling da chamada para o thread do controle. Os métodos de invocação sempre invocam seus retornos de chamada no thread do controle.
Observação
Uma exceção poderá ser gerada se o thread que deve processar a mensagem não estiver mais ativo.
Confira também
Aplica-se a
BeginInvoke(Action)
Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle foi criado.
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
Um delegado para um método que não tem parâmetros.
Retornos
Um IAsyncResult que representa o resultado da operação BeginInvoke(Action).
Aplica-se a
BeginInvoke(Delegate)
Executa o delegado especificado de forma assíncrona no thread em que o identificador subjacente do controle 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 para um método que não tem parâmetros.
Retornos
Um IAsyncResult que representa o resultado da operação BeginInvoke(Delegate).
Exceções
Não foi possível encontrar um identificador de janela apropriado.
Exemplos
O exemplo de código a seguir demonstra o uso 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
Comentários
O delegado é chamado de forma assíncrona e esse método retorna imediatamente. Você pode chamar esse método de qualquer thread, até mesmo o thread que possui o identificador do controle. 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. Se nenhum identificador apropriado puder ser encontrado, BeginInvoke lançará uma exceção. As exceções dentro do método delegado são consideradas não rastreadas e serão enviadas para o manipulador de exceção não mapeado do aplicativo.
Você pode chamar EndInvoke para recuperar o valor retornado do delegado, se o neccesário, mas isso não é necessário. EndInvoke será bloqueado até que o valor retornado possa ser recuperado.
Observação
A maioria dos métodos em um controle só pode ser chamada do thread em que o controle foi criado. Além da InvokeRequired propriedade, há quatro métodos em um controle que são thread safe: Invoke, e BeginInvokeEndInvokeCreateGraphics se o identificador para o controle já foi criado. Chamar CreateGraphics antes que o identificador do controle tenha sido criado em um thread em segundo plano pode causar chamadas cruzadas ilegais. Para todas as outras chamadas de método, você deve usar um dos métodos de invocação para fazer marshaling da chamada para o thread do controle. Os métodos de invocação sempre invocam seus retornos de chamada no thread do controle.
Observação
Uma exceção poderá ser gerada se o thread que deve processar a mensagem não estiver mais ativo.