Bonjour,
J'ai un petit souci, en fait non j'en ai deux
Voici le premier:
Je fais une application Client/Serveur en C# et j'utilise le Remoting
Je souhaite envoyer des evenement aux clients depuis le serveur
Pour que le l'envoi des evenement soient independant des reponses des clients, je veux que ce soit asynchrone et j'ai utilise le code suivant, en utilisant un thread different pour chaque envoi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
49
50
51
52
53
54
55
56 /// <summary> /// Classe utilisée pour envoyer les évènements en utilisant des thread distincts /// </summary> class MyThread { public delegate void ErrorHandler(Delegate d); public event ErrorHandler Error; object[] _args; Delegate _target; public MyThread(Delegate d, params object[] args) { this._target = d; this._args = args; } public void Call() { System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(CallDelegate)); } void CallDelegate(Object stateInfo) { try { this._target.DynamicInvoke(this._args); } catch { if( Error!=null) { Error(this._target); } } } } public void Unregister(Delegate d) { _UpdateDataHandler -= (UpdateDataHandler)d; System.Console.WriteLine("Unregistered"); } public void FireUpdateDataEvent() { if (_UpdateDataHandler != null) { UpdateDataHandler copie = _UpdateDataHandler; foreach(Delegate d in copie.GetInvocationList()) { MyThread t=new MyThread(d); t.Error+=new MBServeur.MBFacade.MyThread.ErrorHandler(Unregister); t.Call(); } } }
Cela fonctionne tres bien, sauf la toute premiere fois ou l'evenement est envoye, le "dynamicInvoke" est tres lent (plusieurs secondes...) et je n'arrive pas a trouver pourquoi, puisqu'apres tout fonctionne parfaitement.
Donc voila, est-ce que quelqu'un peut m'aider? je ne m'en sors pas!
Je vais faire un autre post pour mon second probleme, ce sera plus clair...
Merci d'avance!
Partager