VB.NET Méthode Invoke
J'ai cette méthode dans mon code:
Private Sub Display()
Received.AppendText(" - " & RXArray)
End Sub
Quoi la différence entre ces 2 appels:
Me.Invoke(New MethodInvoker(AddressOf Display))
ET
Display()
Je sais que c'est quelque chose au sujet de thread, mais je ne suis pas sûr.
Merci d'avance
Voir stackoverflow.com/q/1331009/11683
La différence est que Invoke() augmenter fortement les chances de votre programme va s'accrocher à une impasse. Toujours utiliser BeginInvoke() à la place. Particulièrement gênant avec la classe SerialPort, le type de la classe où vous pour utiliser BeginInvoke dans le DataReceived gestionnaire d'événement puisqu'il s'exécute sur un thread de travail et ne peut donc pas directement mettre à jour les contrôles. À l'aide de Invoke() provoque un blocage lorsque vous appelez la SerialPort.La méthode Close ().
La différence est que Invoke() augmenter fortement les chances de votre programme va s'accrocher à une impasse. Toujours utiliser BeginInvoke() à la place. Particulièrement gênant avec la classe SerialPort, le type de la classe où vous pour utiliser BeginInvoke dans le DataReceived gestionnaire d'événement puisqu'il s'exécute sur un thread de travail et ne peut donc pas directement mettre à jour les contrôles. À l'aide de Invoke() provoque un blocage lorsque vous appelez la SerialPort.La méthode Close ().
OriginalL'auteur Redder | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
Utiliser le
Invoke
lorsque vous travaillez dans des threads différents. Par exemple, si l'appelant n'est pas dans le même thread que l'interface utilisateur graphique.Si l'appelant n'a pas besoin d'attendre le résultat de la méthode, vous pourriez même utiliser
BeginInvoke
:Ou moins:
Pour plus de facilité d'écriture vous pouvez déplacer les invoquer dans le
Display
fonction:De cette façon, l'appelant n'a pas à savoir si il est dans le même thread ou pas.
DisplayMustBeOnUIThread
qui fait le travail, et puis un wrapper de la sous-routineDisplay
qui l'appelle directement ou par l'intermédiaire appeler si nécessaire.Private Sub Display()
If Me.InvokeRequired Then Me.Invoke(Sub() DisplayMustBeOnUIThread) Else DisplayMustBeOnUIThread()
End Sub
OriginalL'auteur jor
Ajout de paramètres pour la autre réponse:
OriginalL'auteur Caglayan ALTINCI
Pour les futurs lecteurs, vous pouvez également mettre à jour votre INTERFACE utilisateur de l'objet, de la manière suivante
OriginalL'auteur Levis