J'ai un code qui est exécuté, il exécute une série de lignes en séquence. Je voudrais ajouter une pause entre les deux.
Actuellement, je l'ai comme ça p> ceci cependant gèle le logiciel, et je pense que c'est parce que le temps de sommeil est bien trop long.
J'ai cherché en ligne et j'ai trouvé un autre travail autour appelé Timer.
Peut-on me montrer un exemple de code pour la minuterie qui fonctionne comme thread.sleep? P> merci d'avance. P> Edit: j'ai besoin du logiciel pour attendre 3 heures avant de continuer à suivre reste de l'exécution du code. Ce logiciel est censé communiquer avec des machines et je ne peux pas laisser le reste du code exécuter en attendant 3 heures. P> p>
10 Réponses :
S'il vous plaît voir Cette référence MSDN sur le système . Filfing.Timer Code> Classe
. Il y a une grande explication, tous les membres de la classe et certains échantillons de code à suivre lors du test / apprentissage. P>
Mind You, cependant, la minuterie code> doit être utilisée lorsque vous souhaitez déclencher un événement à un certain intervalle. Si vous souhaitez simplement mettre en pause l'exécution de votre application, vous devez utiliser thread.sleep () code>. Cependant, autant d'autres l'ont souligné, vous amenez votre fil de dormir pendant une durée prolongée. P>
the mise à jour: p>
Après avoir lu certains des commentaires, thread.sleep code> est ce que vous souhaitez utiliser pour cela, vous pouvez utiliser une période de sommeil plus raisonnable que 3 heures. P>
thread.sleep code> n'est probablement pas ce que vous voulez. Utilisez un
System.Threading.Timer code> au lieu d'autres que d'autres ont suggéré. P>
Si l'exigence est B> attendre 3 heures avant d'exécuter du code, utilisez-le sur thread.sleep code> n'est-ce pas ce qu'il devrait utiliser.
Cela pourrait être toujours sur le problème. Il ne dit pas non plus que c'est sur une forme, pourrait être une invite de service ou de commande. Bien que cela ne sonne pas comme s'il le faisait correctement, il y a des tonnes de raisons d'avoir des choses qui se produisent une fois que X heure (Sauvegarde db, fonctions de nettoyage, etc.).
@Jeremyk - Je vais vous donner que je lisais trop dans ses commentaires, mais je vois sa mise à jour, malheureusement, il ne fait aucun de ceux-ci.
Vous dormez le fil pendant 10800 secondes ou 3 heures. Thread.sleep () est conçu pour geler votre fil, arrêtez tout ce qui est de travailler dans le logiciel pour cette durée. Dans ce cas, la durée est de 18 minutes. Qu'essayez-vous de faire? P>
Votre logiciel gelerait si ce sommeil est sur le fil principal. Gardez à l'esprit que le paramètre est en millisecondes. 10 800 000 millisecondes = 10 800 secondes
Une autre façon de passer le temps consiste à transmettre un objet Timespan à la place. Ex: p> comme pour la minuterie: p> Vous pouvez utiliser system.timers.time code>
; p>
avoir un look thread.sleep (300) ne fonctionne pas correctement P >
Vous devez probablement utiliser le "répartiteur". Demandez à un look ici aussi bien p>
Votre problème est que vous bloquez le fil principal de votre application, responsable de la gestion de l'interface utilisateur. Tu ne devrais pas faire ça. Utilisez plutôt une minuterie - les formulaires que l'une est probablement la plus simple dans une application de formulaires ou envisager un travail d'arrière-plan. (Pour une telle longue attente, une minuterie est probablement plus appropriée) p>
thread.sleep serait généralement utilisé pour suspendre un thread séparé, non dans le fil principal de votre application. P>
La minuterie serait généralement utilisée pour causer périodiquement le fil principal d'arrêter ses opérations normales et de gérer un événement. P>
L'une des méthodes peut être utilisée pour effectuer périodiquement une fonction après un certain intervalle de temps. P>
Ce que je ne ferais pas, c'est demander au fil principal de dormir pendant 3 heures. P>
Utilisez une minuterie!
private DispatcherTimer Timer; public Constructor { Timer = new System.Windows.Threading.DispatcherTimer(); Timer.Tick += new EventHandler(Timer_Tick); Timer.Interval = new TimeSpan(0,0,10); Timer.Start(); } private void Timer_Tick(object sender, EventArgs e) { Timer.Stop(); Timer -= Timer_Tick; Timer = null; // DO SOMETHING }
Je pense que vous devez utiliser un moniteur . Il vous aide à attendre des objets et à libérer la serrure lorsque vous devez continuer à exécuter le programme. P>
Vous devriez trouver votre réponse ici: Synchronisation de fil de sécurité p>
Vous pouvez remplacer
Task.WaitAll(Task.Delay(X));
Alors ... utilisez un temps de sommeil plus court? 10 800 000 millisecondes sont de trois heures. Les minuteries et le sommeil servent des objectifs différents, vous ne pouvez pas vraiment en remplacer un avec un autre.
Pourquoi avez-vous demandé une durée de sommeil de 10800 secondes?
Juste pour clarifier, voulez-vous vraiment dormir pour
10800000 code> millisecondes (3 heures)?
Voir MSDN pour un exemple avec les minuteries: msdn.microsoft.com/ fr-fr / bibliothèque / system.timers.timer.aspx
Si vous utilisez votre sommeil dans le fil de l'interface graphique ... il gèlera toute la saisie de l'utilisateur. Ne fais pas ça.
Oui, j'ai besoin du fil pour dormir pendant 3 heures, parfois même 5 heures.
"Gèle le logiciel", si vous dormez un fil différent autre que le fil principal, il ne devrait pas geler. Dormir pendant 3 heures est long. Qu'est-ce que tu trains exactement à faire? Pourquoi voulez-vous que le fil dorme pendant 3 heures?
Si vous essayez d'appeler une fonction toutes les 3 heures, dormir le fil n'est pas le meilleur moyen de l'utiliser.
Quels types de "machines" sont-ils? Ont-ils un automate? Si vous attendez que la machine soit prête à être prête pour quelque chose, vous devez probablement avoir une sorte de lien de données entre la machine et l'IHM - quelque chose pour laisser l'IHM sache qu'il est prêt. Cela semble presque effrayant ...
Cela ressemble à une sorte de processus de lot que vous utilisez? Pourquoi est-ce toujours 3 heures, la période pourrait-elle être plus longue? Si vous êtes un traitement par lots et que vous attendez des tâches sur les "autres machines", vous pouvez envisager de séparer votre code dans avant et après les morceaux et à l'aide d'un planificateur de travail. Windows Scheduler, automatiser ou quelque chose comme ça. Mettre votre code pour dormir pendant 3 heures de sons peut éventuellement comme une mauvaise idée, même avec une minuterie.