Control.BeginInvoke Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 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 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 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.