Fil de discussion.Sleep() sans le gel de l'INTERFACE utilisateur
Tout d'abord, je suis un débutant en C#
et je voudrais faire ceci:
class2.method_79(null, RoomItem_0, num, num2, 0, false, true, true);
System.Threading.Thread.Sleep(250);
class2.method_79(null, RoomItem_0, num, num4, 0, false, true, true);
System.Threading.Thread.Sleep(300);
class2.method_79(null, RoomItem_0, num, num6, 0, false, true, true);
Mais cette solution se fige à l'INTERFACE, comment pourrais-je faire le deuxième événement se produire 250 ms après le premier, etc, sans le figer l'INTERFACE utilisateur?
- Regardez le Multithreading.
- Ne pas bloquer le thread d'INTERFACE utilisateur. Utiliser un thread de travail avec un sommeil. (Notez que vous pouvez également mieux utiliser quelque chose comme un timer). Veuillez lire ce stackoverflow.com/a/11576659/296526 y compris le lien dans la réponse.
- Vous pouvez également en faire la méthode
async
et l'utilisationawait Task.Delay(250)
. - double possible de Filetage en c#
- Enfin j'ai utilisé la méthode asynchrone avec attendent tâche.retard, il fonctionne parfaitement merci!!!
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple d'utiliser le sommeil, sans le figer le thread d'INTERFACE utilisateur est de faire de votre méthode asynchrone. Pour faire de votre méthode asynchrone ajouter le async modificateur.
à
Maintenant, vous pouvez utiliser le attendent opérateur à effectuer les tâches asynchrones, dans votre cas.
Cela en fait un asynchrone méthode et exécuter de manière asynchrone à partir de votre thread de l'INTERFACE utilisateur.
Noter que c'est uniquement pris en charge dans Microsoft .NET framework 4.5 et supérieur.
.
Vous pouvez utiliser un Répartiteur De La Minuterie pour le temps de votre exécution de méthodes..
Vous êtes dans le thread de l'INTERFACE utilisateur lorsque vous appelez
.Sleep();
.C'est pourquoi c'est le gel de l'INTERFACE utilisateur. Si vous avez besoin de le faire sans le gel de l'INTERFACE utilisateur, vous devez exécuter le code dans des threads séparés.
Exécuter vos tâches consommatrices de temps sur le thread séparé. Éviter les tâches consommatrices de temps et
Thread.Sleep()
sur le thread de l'INTERFACE utilisateur.Essayer ce code