Bonjours à tous,
Je débute avec c# et le multithreading et je pense ne pas avoir tout saisie sur le fonctionnement de la methode Invoke.
Mon problème est le suivant :
J'ai un thread qui reçoit des messages par reseau et appelle des events selon le type de message.
J'aimerai qu'un des events puisse modifier l'UI (donc un des données utilisées dans le thread UI), on occurence ce serait une simple ListBox.
Voilà comment je procéde :
La fonction OnActionListDataChange est biensure celle qui ecoute l'event envoyé par le réseau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private void OnActionsListDataChange() { this.Invoke(new NoParam(UpdateActionsListUI)); } private void UpdateActionsListUI() { this.moWaitingActionsListBox.Items.Clear(); ... }
Ceci marche tres bien sauf si l'event declenchant OnActionsListDataChange() est appelé plusieurs fois à la suite dans quel cas j'obtiens la callstack de l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Error on message callback calling : <message type='ActionSystem' sender_uid='4' event='WaitingActionAdded' action_id='16'/> à System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) à System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) à System.Windows.Forms.Control.Invoke(Delegate method) à MonitoringTool.EntityPanel.OnActionsListChange() dans D:\Project\AITool\MonitoringTool\EntityPanel.cs:ligne 59
Voilà j'espère avoir été assez claire pour que quelqu'un puisse m'eclairer .
Merci d'avance.
Partager