Condividi tramite


Control.BeginInvoke Metodo

Definizione

Esegue un delegato in modo asincrono sul thread in cui è stato creato l'handle sottostante del controllo.

Overload

Nome Descrizione
BeginInvoke(Delegate, Object[])

Esegue il delegato specificato in modo asincrono con gli argomenti specificati, nel thread in cui è stato creato l'handle sottostante del controllo.

BeginInvoke(Action)

Esegue il delegato specificato in modo asincrono sul thread in cui è stato creato l'handle sottostante del controllo.

BeginInvoke(Delegate)

Esegue il delegato specificato in modo asincrono sul thread in cui è stato creato l'handle sottostante del controllo.

BeginInvoke(Delegate, Object[])

Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs

Esegue il delegato specificato in modo asincrono con gli argomenti specificati, nel thread in cui è stato creato l'handle sottostante del controllo.

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);
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

Parametri

method
Delegate

Delegato a un metodo che accetta parametri dello stesso numero e tipo contenuti nel args parametro .

args
Object[]

Matrice di oggetti da passare come argomenti al metodo specificato. Può essere null se non sono necessari argomenti.

Restituisce

Oggetto IAsyncResult che rappresenta il risultato dell'operazione BeginInvoke(Delegate) .

Implementazioni

Eccezioni

Non è possibile trovare alcun handle di finestra appropriato.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del BeginInvoke metodo .

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

Commenti

Il delegato viene chiamato in modo asincrono e questo metodo restituisce immediatamente. È possibile chiamare questo metodo da qualsiasi thread, anche il thread proprietario dell'handle del controllo. Se l'handle del controllo non esiste ancora, questo metodo cerca la catena padre del controllo fino a quando non trova un controllo o un modulo che dispone di un handle di finestra. Se non è possibile trovare un handle appropriato, BeginInvoke genererà un'eccezione. Le eccezioni all'interno del metodo delegato vengono considerate non intrappolate e verranno inviate al gestore eccezioni non intrappolate dell'applicazione.

È possibile chiamare EndInvoke per recuperare il valore restituito dal delegato, se neccesary, ma questo non è obbligatorio. EndInvoke bloccherà fino a quando non sarà possibile recuperare il valore restituito.

Annotazioni

La maggior parte dei metodi in un controllo può essere chiamata solo dal thread in cui è stato creato il controllo. Oltre alla InvokeRequired proprietà, sono disponibili quattro metodi su un controllo thread-safe: Invoke, BeginInvokeEndInvoke, e CreateGraphics se l'handle per il controllo è già stato creato. La chiamata CreateGraphics prima che l'handle del controllo sia stato creato in un thread in background può causare chiamate tra thread non valide. Per tutte le altre chiamate di metodo, è consigliabile usare uno dei metodi invoke per effettuare il marshalling della chiamata al thread del controllo. I metodi invoke richiamano sempre i callback sul thread del controllo.

Annotazioni

È possibile che venga generata un'eccezione se il thread che deve elaborare il messaggio non è più attivo.

Vedi anche

Si applica a

BeginInvoke(Action)

Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs

Esegue il delegato specificato in modo asincrono sul thread in cui è stato creato l'handle sottostante del controllo.

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

Parametri

method
Action

Delegato a un metodo che non accetta parametri.

Restituisce

Oggetto IAsyncResult che rappresenta il risultato dell'operazione BeginInvoke(Action) .

Si applica a

BeginInvoke(Delegate)

Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs
Origine:
Control.cs

Esegue il delegato specificato in modo asincrono sul thread in cui è stato creato l'handle sottostante del controllo.

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

Parametri

method
Delegate

Delegato a un metodo che non accetta parametri.

Restituisce

Oggetto IAsyncResult che rappresenta il risultato dell'operazione BeginInvoke(Delegate) .

Eccezioni

Non è possibile trovare alcun handle di finestra appropriato.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso del BeginInvoke metodo .

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

Commenti

Il delegato viene chiamato in modo asincrono e questo metodo restituisce immediatamente. È possibile chiamare questo metodo da qualsiasi thread, anche il thread proprietario dell'handle del controllo. Se l'handle del controllo non esiste ancora, questo metodo cerca la catena padre del controllo fino a quando non trova un controllo o un modulo che dispone di un handle di finestra. Se non è possibile trovare un handle appropriato, BeginInvoke genererà un'eccezione. Le eccezioni all'interno del metodo delegato vengono considerate non intrappolate e verranno inviate al gestore eccezioni non intrappolate dell'applicazione.

È possibile chiamare EndInvoke per recuperare il valore restituito dal delegato, se neccesary, ma questo non è obbligatorio. EndInvoke bloccherà fino a quando non sarà possibile recuperare il valore restituito.

Annotazioni

La maggior parte dei metodi in un controllo può essere chiamata solo dal thread in cui è stato creato il controllo. Oltre alla InvokeRequired proprietà, sono disponibili quattro metodi su un controllo thread-safe: Invoke, BeginInvokeEndInvoke, e CreateGraphics se l'handle per il controllo è già stato creato. La chiamata CreateGraphics prima che l'handle del controllo sia stato creato in un thread in background può causare chiamate tra thread non valide. Per tutte le altre chiamate di metodo, è consigliabile usare uno dei metodi invoke per effettuare il marshalling della chiamata al thread del controllo. I metodi invoke richiamano sempre i callback sul thread del controllo.

Annotazioni

È possibile che venga generata un'eccezione se il thread che deve elaborare il messaggio non è più attivo.

Vedi anche

Si applica a