C# appel asynchrone de la méthode périodiquement
Thread principal de l'application est en train de faire un peu de travail.
Il existe aussi une minuterie, qui devraient toutes les 10 minutes à l'appel d'une méthode qui devrait tourner asynchrone.
Pourriez-vous me donner un bon exemple comment organiser cela?
Est-ce ASP.NET, les formulaires, les autres?
Est-ce un GUI application?
C'est un service windows qui est en fait un serveur et toujours à l'écoute pour de nouvelles connexions. Il n'existe donc pas de l'interface, mais le serveur de travail ne devrait pas être arrêté
Est-ce un GUI application?
C'est un service windows qui est en fait un serveur et toujours à l'écoute pour de nouvelles connexions. Il n'existe donc pas de l'interface, mais le serveur de travail ne devrait pas être arrêté
OriginalL'auteur Ksice | 2012-06-25
Vous devez vous connecter pour publier un commentaire.
Je vous déconseille d'utiliser explicitement un thread avec une boucle et le sommeil. C'est une mauvaise pratique et moche. Il y a des classes timer à cet effet:
Si ce n'est pas un GUI application, vous pouvez utiliser Système.Le filetage.Minuterie d'exécuter du code sur un thread différent périodiquement.
Si c'est un WinForms/WPF application jetez un oeil à Système.De Windows.Les formulaires.Minuterie et Système.De Windows.Le filetage.DispatcherTimer respectivement. Ces sont pratiques, car ils exécutent leur code sur le thread GUI, donc pas besoin explicite
Invoke
appels.Les liens contiennent également des exemples pour chacun.
Cela dépend de ce que vous devez faire. Ces horloges sont bonnes pour une rapide mise à jour périodique de l'interface graphique. Si le code est plus long cours d'exécution, vous devez utiliser le
System.Threading.Timer
expliciteInvoke
juste pour la mise à jour de la partie. De toute façon, il est bon de connaître les outils disponibles pour les différentes situations.OriginalL'auteur Tudor
Le plus simple est d'appeler un grande fonction qui dort pendant 10 minutes entre les actions. Ce n'est pas de bloquer quoi que ce soit car il est dans un autre thread.
.NET 4, vous voulez faire cela avec le
Task
classe:(ce code n'a pas été testé)
Merci, mais quand j'ai écrit cette réponse,
Task.Delay
(ainsi queasync
etawait
) dans le cadre de .NET 4.5 n'était pas encore disponible (seulement RC). La version finale a été de 2 mois plus tard. 🙂OriginalL'auteur fero
Utiliser un BackgroundWorker fil.
OriginalL'auteur Vok
Démarrer un autre thread qui exécute une boucle
L'intérieur de la boucle; le sommeil pendant 10 minutes, puis appelez votre méthode, répétez
OriginalL'auteur user1480312