Re: Manipuler une list d'une autre form
Invoke, invoke , invoke, invoke, invoke
Avoir un delegate n'apporte rien si tu ne passes pas par Invoke.
Invoke est à utiliser dans tous les cas où un control est manipulé via un autre thread que celui depuis lequel tu as créé le control (celui de ta form). Ca marche aussi bien dans un sens que dans l'autre. Simplement, si c'est en lecture, ton delegate peut renvoyer un objet (ce que tu lis dans ton control). Et de la même façon, tu récupères dans ce cas l'objet retourné par Invoke.
Exemple :
http://msdn.microsoft.com/en-us/library ... .aspx#Y820
--------------------------------------- H.S. réponse pour ceux qui codent en C# --------------------------------------------------
A noter, pour ceux qui utilisent le C#:
Pour alléger la syntaxe, tu peux déclarer un delegate anonyme, cela permet de simplifier pas mal le code (sans avoir à 1/ définir le proto du delegate, 2/ déclarer un délégate, 3/définir la méthode associée, 4/ affecter la méthode au delegate...).
Exemple (MonitorNewPC est appelé à reception d'un event, donc à priori à l'extérieur du thread) :
void MonitorNewPC(PlayerCharacter PC)
{
this.Invoke((MethodInvoker)delegate
{
labelDetail.Text = String.Format("New PC found : {0}, lv {1} on {2}", PC.Name, PC.Level, PC.ServerName);
});
}
Et si vous voulez une fonction qui marche dans l'autre sens (lecture de la valeur du control - toujours en C#) :
string GetLastMonitoringText()
{
return (string)this.Invoke((System.Func<string>)(() => labelDetail.Text));
}
--------------------------------------- Back I.S. --------------------------------------------------
Malheureusement pour vous, à ma connaissance il n'y a pas de méthodes anonymes en VB.NET :mrgreen: