[.Net] Déclenchement d'une fonction après x ms

Je cherche l’équivalent de la fonction setTimeout en Javascript pour C#. C’est en fait pour simuler du lag en réseau local (protocoles de tests, quand tu nous tiens).

Pour le packet loss je sais comment faire (je dis a mon programme d’oublier d’envoyer certains packets) mais pour le lag, il faudrait en fait que j’ai une fonction qui dise “déclenche l’envoi du message dans x temps” (ou x est un temps aléatoire).

Ben heu selon ta situation t’as plusieurs types de classes Timer qui sont disponibles. Cherches Timer sur MSDN.

Dans le genre mega simple ( merci .Net ! )

myTimer = new System.Timers.Timer(); myTimer.Elapsed += new ElapsedEventHandler (maFonction); myTimer.Interval = 300000; myTimer.Start();

L’intervalle est en millisecondes , du coup ça fait 5 minutes là !
Attention , maFonction est tout de meme un evenement donc sa signature est du genre :

private void maFonction ( object source , ElapsedEventArgs e ) { //je fais ce que je veux , avec mes cheveux }

Voila , msdn rules , j’ai trouvé ça en environ 3 secondes quand j’en ai eu besoin :stuck_out_tongue:

Mouais j’avais cherché “SetTimeout CSharp”. Faut croire que parfois google m’aide pas vraiment :P.

Euh juste une question comme ca: on peut pas transmettre des paramètres a maFonction?

[quote name=‘gniii’ date=’ ton pseudo casse le BBCode’]Euh juste une question comme ca: on peut pas transmettre des paramètres a maFonction?
[right][post=“337554”]<{POST_SNAPBACK}>[/post][/right][/quote]

System.Timers.Timer est assez buggé
Ce bug est toujours d’actualité avec le .NET Framework beta 2.0.40607.

Comme dit dans le lien ci-dessus, tu devrais plutôt utiliser un System.Threading.Timer.

Il suffit de l’initialiser avec un WaitCallback TimerCallback et un objet d’état à balancer dans le callback.
Donc oui, avec un System.Threading.Timer tu peux lui balancer des paramètres.

[quote name=‹ Ge-Off › date=’ 2 Mar 2005, 16:19’]System.Timers.Timer est assez buggé
Ce bug est toujours d’actualité avec le .NET Framework beta 2.0.40607.
(…)
[right][post=« 337647 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Ah, apparemment, je suis pas le seul a avoir eu des problèmes :stuck_out_tongue:
Sinon, ouais, System.Threading.Timer est mieux… attention, cependant, quand tu l’utilise avec l’UI, le callback est pas toujours appellé dans le thread qui gère l’UI, et il est vraiment pas conseillé de modifier l’UI hors de son thread (voire Form.Invoke())

Il faut surtout plutot utiliser System.Windows.Forms.Timer qui est fait pour. Il y a trois classes de Timer, chacun a ses utilisations, c’est pas un bug :stuck_out_tongue:

Voir ici:

http://msdn.microsoft.com/msdnmag/issues/0…ET/default.aspx

Je ne disais pas le contraire :stuck_out_tongue:

Je supposais juste que, étant une appli réseau, il l’a surement conçue sous forme d’un service windows ou d’une appli console, donc le System.Windows.Forms.Timer est exclu.

J’ai rencontré le problème de System.Timers.Timer dans l’un de mes services Windows, et, contrairement à ce que dit la KB (certes, c’est du .net 2.0 beta), également dans une appli fenêtrée proto du service (pour émuler un service windows, faciliter le développement et le debugging).

Je confirmes, pas de Forms en vue :stuck_out_tongue:

[quote name=’[PERE]Cil’ date=’ 3 Mar 2005, 03:54’]Je confirmes, pas de Forms en vue :stuck_out_tongue:
[right][post=« 337880 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Non mais je repondais a Tzim pour le coup du « il faut que ca s’execute dans le thread de UI ». Pour ton cas il te faut ou System.Timers.Timer ou System.Threading.Timer selon ce que tu veux, surement le deuxiemme. Pour vraiment comprendre les diff, il te faut lire la doc :stuck_out_tongue: et le lien que j’ai file hehe :stuck_out_tongue: