Partager via


Control.BeginInvoke Méthode

Définition

Exécute un délégué de manière asynchrone sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

Surcharges

BeginInvoke(Delegate, Object[])

Exécute le délégué spécifié de manière asynchrone avec les arguments spécifiés, sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

BeginInvoke(Action)

Exécute le délégué spécifié de manière asynchrone sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

BeginInvoke(Delegate)

Exécute le délégué spécifié de manière asynchrone sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

BeginInvoke(Delegate, Object[])

Exécute le délégué spécifié de manière asynchrone avec les arguments spécifiés, sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

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

Paramètres

method
Delegate

Délégué vers une méthode qui accepte des paramètres du même nombre et du même type que ceux contenus dans le paramètre args.

args
Object[]

Tableau d’objets à passer comme arguments à la méthode donnée. Peut être null si aucun argument n'est nécessaire.

Retours

IAsyncResult

IAsyncResult qui représente le résultat de l'opération BeginInvoke(Delegate).

Implémente

Exceptions

Aucun handle de fenêtre approprié n'a été trouvé.

Exemples

L’exemple de code suivant illustre une utilisation de la BeginInvoke méthode.

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

Remarques

Le délégué est appelé de façon asynchrone et cette méthode retourne immédiatement. Vous pouvez appeler cette méthode à partir de n’importe quel thread, même le thread propriétaire du handle du contrôle. Si le handle du contrôle n’existe pas encore, cette méthode recherche la chaîne parente du contrôle jusqu’à ce qu’elle trouve un contrôle ou un formulaire qui a une poignée de fenêtre. Si aucun handle approprié n’est trouvé, BeginInvoke lève une exception. Les exceptions au sein de la méthode de délégué sont considérées comme non traitées et sont envoyées au gestionnaire d’exceptions non compressé de l’application.

Vous pouvez appeler EndInvoke pour récupérer la valeur de retour du délégué, si ce n’est pas obligatoire. EndInvoke bloquera jusqu’à ce que la valeur de retour puisse être récupérée.

Notes

La plupart des méthodes sur un contrôle peuvent uniquement être appelées à partir du thread où le contrôle a été créé. En plus de la InvokeRequired propriété, il existe quatre méthodes sur un contrôle qui sont thread safe : Invoke, BeginInvoke, EndInvokeet CreateGraphics si le handle du contrôle a déjà été créé. L’appel CreateGraphics avant la création du handle du contrôle sur un thread d’arrière-plan peut entraîner des appels de threads croisés non conformes. Pour tous les autres appels de méthode, vous devez utiliser l’une des méthodes invoke pour marshaler l’appel au thread du contrôle. Les méthodes d’appel appellent toujours leurs rappels sur le thread du contrôle.

Notes

Une exception peut être levée si le thread qui doit traiter le message n’est plus actif.

Voir aussi

S’applique à

BeginInvoke(Action)

Exécute le délégué spécifié de manière asynchrone sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

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

Paramètres

method
Action

Délégué vers une méthode qui n'accepte pas de paramètres.

Retours

IAsyncResult

IAsyncResult qui représente le résultat de l'opération BeginInvoke(Action).

S’applique à

BeginInvoke(Delegate)

Exécute le délégué spécifié de manière asynchrone sur le thread sur lequel le handle sous-jacent du contrôle a été créé.

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

Paramètres

method
Delegate

Délégué vers une méthode qui n'accepte pas de paramètres.

Retours

IAsyncResult

IAsyncResult qui représente le résultat de l'opération BeginInvoke(Delegate).

Exceptions

Aucun handle de fenêtre approprié n'a été trouvé.

Exemples

L’exemple de code suivant illustre une utilisation de la BeginInvoke méthode.

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

Remarques

Le délégué est appelé de façon asynchrone et cette méthode retourne immédiatement. Vous pouvez appeler cette méthode à partir de n’importe quel thread, même le thread propriétaire du handle du contrôle. Si le handle du contrôle n’existe pas encore, cette méthode recherche la chaîne parente du contrôle jusqu’à ce qu’elle trouve un contrôle ou un formulaire qui a une poignée de fenêtre. Si aucun handle approprié n’est trouvé, BeginInvoke lève une exception. Les exceptions au sein de la méthode de délégué sont considérées comme non traitées et sont envoyées au gestionnaire d’exceptions non compressé de l’application.

Vous pouvez appeler EndInvoke pour récupérer la valeur de retour du délégué, si ce n’est pas obligatoire. EndInvoke bloquera jusqu’à ce que la valeur de retour puisse être récupérée.

Notes

La plupart des méthodes sur un contrôle peuvent uniquement être appelées à partir du thread où le contrôle a été créé. En plus de la InvokeRequired propriété, il existe quatre méthodes sur un contrôle qui sont thread safe : Invoke, BeginInvoke, EndInvokeet CreateGraphics si le handle du contrôle a déjà été créé. L’appel CreateGraphics avant la création du handle du contrôle sur un thread d’arrière-plan peut entraîner des appels de threads croisés non conformes. Pour tous les autres appels de méthode, vous devez utiliser l’une des méthodes invoke pour marshaler l’appel au thread du contrôle. Les méthodes d’appel appellent toujours leurs rappels sur le thread du contrôle.

Notes

Une exception peut être levée si le thread qui doit traiter le message n’est plus actif.

Voir aussi

S’applique à