1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
System.Threading.Thread tEffectuerOp;
delegate void ModifierLabelMessageCallback(string text);
private ModifierLabelMessageCallback _modifierLabelMessage;
public FormP()
{
//on init le delegate à la contruction de la fenetre
this._modifierLabelMessage = new ModifierLabelMessageCallback(this.ModifierLabelMessage);
}
//Dans cette fonction on démarre le thread qui lance le traitement sur l'appareil en usb
public string LancerTraitement()
{
//on init le thread
this.tEffectuerOp = new System.Threading.Thread(new System.Threading.ThreadStart(this.EffectuerOperation));
this.tEffectuerOp.Start();
}
//Fonction du traitement
public string EffectuerOperation()
{
//on fait des trucs avant
...
//là on lance le traitement sur l'appareil usb qui, durant ses calculs, nous envoie des infos par la fonction AfficherMessage
this.usbServer.Demarrer();
//on continue à faire des trucs
...
}
//Fonction qui permet de récupérer des messages à afficher pour voir l'avancé du traitement sur l'appareil usb.
public void AfficherMessage(string messageAfficher)
{
//Une fois ici, l'invoke ne fait rien. Il reste bloqué. Il ne lance pas la fonction ModifierLabelMessage.
this.Invoke(_modifierLabelMessage, new object[] {messageAfficher});
//Si je met cette ligne ici : this.labelMessage.Text = text;
//J'obtiens une erreur qui me dit que je dois passer par un Control.Invoke.
}
//Modifie le label sur la fenetre de l'utilisateur.
public void ModifierLabelMessage(string text)
{
this.labelMessage.Text = text;
this.Refresh();
} |