2010-12-02 41 views
0

Problème est que je ne veux pas utiliser Threading.Sleep (1000) parce que j'ai besoin du thread pour rester en vie, juste une pause avant d'exécuter la ligne de code suivante tout en interdisant à l'utilisateur de cliquer sur le formulaire pendant la pause. La méthode la plus simple à laquelle je pouvais penser était d'ouvrir un dialogue temporisé à fermeture automatique avec une opacité de 0. Une meilleure façon d'obtenir le même résultat?Dans les formulaires Windows DotNet, comment faire une pause dans un formulaire sans mettre le fil du formulaire en veille?

+0

Je vois que vous avez un tag pour le multithreading. Essayez-vous de faire en sorte que le formulaire attende la fin d'un thread en arrière-plan? Si c'est le cas, je vous suggère de regarder la classe BackgroundWorker. Vous pouvez ajouter des gestionnaires aux événements ProgressChanged et OnRunWorkerCompleted, où vous pouvez définir enabled sur false lorsque la progression passe à started, puis à true lorsqu'elle est terminée. Prend un peu pour le faire correctement, cependant. Peut-être serait-il préférable d'aller avec la réponse d'Albin. http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx – seekerOfKnowledge

Répondre

1

Vous pouvez définir Enabled = false; et utiliser un temporisateur pour le définir sur true ultérieurement.

0

Définissez Enabled sur false, puis remettez-le à plus tard. Vous pourriez le faire sur un fil séparé. Pensez également à changer le curseur en curseur d'attente.

0

Il y a quelques façons:

  • Désactiver tout le formulaire, faites votre traitement et d'activer à nouveau. (Utilisez la propriété Form.Enabled.)

  • Afficher une boîte de dialogue modale sans options pour la fermer ou la déplacer (complètement verrouillée) avec un message du type "Chargement" ou "Traitement", faire votre travail et le fermer.