blobette
Messages postés11Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 6 mai 2008
-
28 août 2007 à 11:13
blobette
Messages postés11Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 6 mai 2008
-
28 août 2007 à 11:42
Bonjour,
J'ai un petit souci :
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 :
/// <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 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...
tomlev
Messages postés25Date d'inscriptionsamedi 22 octobre 2005StatutMembreDernière intervention28 août 2007 28 août 2007 à 11:25
C'est peut-être lié à l'établissement de la connexion ?
Tu pourrais essayer d'envoyer un évènement bidon au démarrage, histoire que les évènements suivants soient plus rapides.
blobette
Messages postés11Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention 6 mai 2008 28 août 2007 à 11:42
C'est qu'en faisant ca ca marche, c'est une bonne idee!
Mais le probleme, c'est que comme c'est un evenement d emise a jour d'ihm important, je ne peux pas rendre disponible l'ihm avant d'etre sure que cet evenement fonctionne, du coup en faisant ca, je retarde l'affichage de l'ihm de plusieurs secondes! ca fait long!
donc effectivement c'est une bonne solution de contournement, mais j'ai peur que ca cache un probleme latent quelque part...