Comment puis-je déclencher une méthode pour exécuter après x secondes?
Je suis en train de travailler sur un C# Windows Forms application où j'ai besoin de la méthode de la pause de 30 secondes jusqu'à ce qu'il continue sur la ligne suivante de code. J'ai essayé Thread.Sleep()
qui n'était pas adapté pour cette application et j'ai compris que je doit utiliser une sorte de minuterie à la place. J'ai beaucoup cherché mais je n'arrive pas à comprendre comment mettre en œuvre des chronomètres.
Mon code est ci-dessous et quelqu'un pourrait-il me montrer comment je doit mettre en œuvre la minuterie. J'ai fait un commentaire sur l'endroit où je veux que la méthode pour faire une pause.
private void start_Vid_Click(object sender, EventArgs e)
{
if (video.State != StateFlags.Running)
{
viewport.Visible = true;
video.Play();
}
//Here I want to wait 30 seconds until the next line of code is triggered
viewport.Visible = false;
viewport2.Visible = true;
pictureBox1.Visible = true;
start_Webc();
video2.Play();
}
Créer un
Pourquoi Thread.Le sommeil n'est pas adapté pour cette application?
Fil de discussion.Le sommeil est rarement approprié, sauf si vous explicitement sur votre propre thread. Dans ce cas, il pourrait bloquer l'INTERFACE utilisateur complètement, le rendu de l'interface inutile et l'interruption de la vidéo.
System.Windows.Forms.Timer
.Pourquoi Thread.Le sommeil n'est pas adapté pour cette application?
Fil de discussion.Le sommeil est rarement approprié, sauf si vous explicitement sur votre propre thread. Dans ce cas, il pourrait bloquer l'INTERFACE utilisateur complètement, le rendu de l'interface inutile et l'interruption de la vidéo.
OriginalL'auteur user1881847 | 2012-12-06
Vous devez vous connecter pour publier un commentaire.
Si votre application est un .Net 4.5 application, alors il est un peu plus facile à utiliser
Task
:OriginalL'auteur Kamyar Nazeri
Tâche.Le retard n'est pas disponible sur .NET 4.0, mais vous pouvez commencer la tâche, qui va juste dormir pendant 30 secondes, et plus tard, vous pouvez continuer sur le thread de l'INTERFACE utilisateur de nouveau:
La minuterie est également bon, parce que
Tick
événement sera exécuté sur le thread de l'INTERFACE utilisateur. Aussi donc OP de code n'utilise pas de variables locales, alors vous pouvez mettre la minuterie sur le formulaire, définissez l'intervalle, abonnez-vous à l'événement. Et tout le code sera simple commetimer1.Start()
;Un problème que j'ai pensé à cette solution, je suppose que tous ces revendeurs à valeur ajoutée (
viewport
,pictureBox
etc...) sont des éléments de l'UI et vous pourriez avoir besoin pourInvoke
pour eux - ne pasContinueWith
exécuter sur son propre Thread?c'est pourquoi je continue avec
TaskScheduler.FromCurrentSynchronizationContext()
🙂Ah je vois, excellent!
OriginalL'auteur Sergey Berezovskiy
Au niveau de la classe de définir une instance de
Timer
(Il y a quelques classes comme celle - ci, pour une application winforms vous devez utiliserSystem.Windows.Forms.Timer
)Ensuite dans votre méthode, ajouter des lignes à la poignée de son cocher et le lancer:
OriginalL'auteur Jamiec
Il y aurait aussi une façon de réactif extensions:
OriginalL'auteur LaurinSt
Nous pouvons le faire à l'aide de la Tâche de
OriginalL'auteur Mahesh