Désactiver la forme tout en BackgroundWorker est occupé?
Je ne veux pas que l'utilisateur puisse interagir avec mon application pendant un certain backgroundworker est occupé (travail). J'ai créé ce bgw de sorte que l'application n'a pas l'air gelé quand elle fonctionne. Mais maintenant, les utilisateurs peuvent se déplacer dans l'application. Comment puis-je désactiver mon formulaire/demande?
Merci!
Si vous allez à la désactivation de la forme tout en se déplaçant code à l'arrière-plan, quel est le point dans le déplaçant à l'arrière-plan?
Parce que sans un backgroundworker Windows va dire que l'application est "Pas de Réponse" si l'utilisateur essaie d'interagir avec elle.
Parce que sans un backgroundworker Windows va dire que l'application est "Pas de Réponse" si l'utilisateur essaie d'interagir avec elle.
OriginalL'auteur Chris | 2009-09-15
Vous devez vous connecter pour publier un commentaire.
Peut-être définir
Enabled
àfalse
?C'est un peu drastique, mais, depuis, il empêche également le formulaire d'être déplacé, redimensionné ou d'un événement fermé. Une meilleure approche serait de mettre un
Panel
de contrôle dans un formulaire, qui aDock = Fill
, et de mettre nos autres contrôles dansPanel
. Ensuite, vous pouvez utiliser à la place laEnabled
propriété de laPanel
pour prévenir la poursuite de la saisie de l'utilisateur.Pensée noter que l'utilisateur sera être en mesure de fermer le formulaire, ce qui devrait être traitée correctement, d'une certaine façon.
la désactivation de la Forme est en effet rapide et sale :o)
Merci, j'ai fait quelque chose de similaire à ce que Michael a suggéré.
Et aussi ce que Fredrik complété sa réponse originale à cette question... Merci!
En utilisant ce que je ne peux changer le curseur de la souris pour les Curseurs.WaitCursor 🙁
OriginalL'auteur Fredrik Mörk
Vous pouvez également créer un modal "occupé accueil" boîte de dialogue qui s'affiche lorsque la tâche en arrière-plan commence et enlevé par programme lorsque la tâche se termine. Vous pourriez mettre un peu d'animation dans cette boîte de trop pour permettre aux utilisateurs de savoir que quelque chose se passe. Vous devez également être sûr de ne pas fermer la boîte de dialogue manuellement (seulement lui permettre d'être fermé par programmation).
L'autre chose que j'ai faite est d'avoir tout sous la forme contenue dans un tableau de bord, puis masquer le panneau et mettre un "Occupé" message. De cette façon, il n'y a aucun moyen d'interagir avec les contrôles.
OriginalL'auteur Garo Yeriazarian
Je suis d'accord avec @michael todd dans son commentaire ci-dessus, la désactivation des contrôles individuels/les boutons de navigation/etc. alors que le fond travailleur est au travail semble être une assez bonne solution. Cela vous donne un contrôle précis sur ce que l'utilisateur peut faire au cours de l'arrière-plan spécifique de l'opération.
Vous pouvez:
OriginalL'auteur Guy Starbuck
Il est plus facile de gérer la désactivation de certaines commandes, en les plaçant à l'intérieur d'un panneau et la désactivation de ce groupe plutôt que de désactiver les contrôles individuels:
Une voie commune pour bloquer d'autres tâches, qui peuvent répondre à vos besoins, en affichant un plus haut de forme avec une barre de progression. J'ai mis en place dans le passé avec succès. D'autres programmes de faire la même chose. Par exemple, dans WinRAR, lorsque l'application est occupé de faire l'extraction ou la compression de fichiers, l'application affiche un plus haut de forme. Il ressemble à un "modal" forme", mais en fait, vous pouvez encore cliquer sur les autres fonctions, à qui WinRAR demande: "voulez-vous annuler l'opération en cours?"
La désactivation de l'ensemble de l'application est souvent pas nécessaire et ne peut pas être intuitif. Alors, demandez-vous si vous avez vraiment besoin de bloquer l'interaction avec le formulaire. Par exemple, j'ai une application qui prend un certain temps pour accomplir certaines tâches. - Je fournir un indicateur de progression pour ce morceau particulier de travail, mais vous pouvez toujours interagir avec l'application pour exécuter d'autres tâches qui s'exécutent simultanément. Même si je ne vous permettait d'effectuer une seule tâche à la fois, vous pouvez toujours afficher le fichier d'aide ou de définir les préférences de l'application, tandis que la tâche est en cours d'exécution. En outre, je donne à l'utilisateur un bouton qui permet de stopper la tâche. La désactivation de la forme permettrait d'éviter ce type d'interaction.
OriginalL'auteur Marcus Adams
Une autre voie possible est que le "filtre" de tous les commentaires de l'application.
Cela pourrait être fait par l'écoute de la "KeyDown" et "MouseButtonDown".
Une fois la tâche en arrière-plan est déclenché, vous pouvez définir la FILTER_INPUT drapeau de vrai et de le remettre une fois fait.
Si le FILTER_INPUT drapeau est réglé puis d'annuler toutes les Clés et les événements de la Souris.
Cela peut ne pas être le plus efficace depuis, tous pression de touches et de Clics allons passer par le Filtre.
OriginalL'auteur Codex