2008-10-15 8 views
3

Ceci est un problème commun à tous les développeurs, je suis à la recherche de la meilleure solution pour rendre l'interface utilisateur des formulaires Windows réactive.Comment rendre les fenêtres de l'interface utilisateur sensibles?

J'ai un fichier GIF animé pour montrer la progression de mon calcul sur Windows. J'ai pris un contrôle de boîte d'image et ai placé le gif animé dans cela. maintenant quand mon calcul commence, le gif animé se fige. Je veux l'inverse, l'animation devrait être visible quand je cours le calcul.

Quel est le problème? Une solution simple est d'afficher une barre de progression à l'utilisateur tout en faisant des calculs complexes derrière la scène

Mon application est une application à un seul thread, et je veux une solution simple, ne cherche pas multi-threads, ou travailleur de fond type de technologies.

Une aide?

Répondre

9

Plusieurs discussions seraient ma recommandation. Un peu brouillon la première fois que vous essayez;)

Modèle le plus simple: Un fil pour l'interface graphique, et un fil pour tout le travail que vous devez faire.

Vérifiez this link.

+0

Le problème est que vous devez travailler avec des délégués et appeler pour apporter des modifications à l'interface utilisateur à partir du thread de travail. – Ikke

+0

Oui. Et? Une fois que vous savez comment, ce n'est plus un problème. – Erik

+0

Eh bien, parfois, vous voulez séparer la logique de la vue. J'ai travaillé sur une classe qui simplifie l'utilisation des sockets. Il utilise un fil pour rechercher des données. Mais je ne peux pas simplement envoyer un événement pour lequel des données sont disponibles, puis mettre à jour l'interface utilisateur dans cet événement. – Ikke

5

Application.DoEvents

vous placez dans la boucle. Cela donne à l'interface utilisateur le temps de faire les choses.

3

Eh bien, la seule façon de faire 2 choses à la fois (comme le font les calculs, tout en restant réactif) est d'utiliser des threads. Si vous ne voulez pas utiliser explicitement les threads, vérifiez s'il existe des appels asynchrones que vous pouvez utiliser pour le faire en arrière-plan. En dehors de cela, faire beaucoup d'appels Application.DoEvents partout où vous faites beaucoup de travail.

2

Je vais devoir le site Jeff sur celui-ci: « solution simple pour afficher un progrès à l'utilisateur tout en faisant des calculs complexes derrière la scène »

Coding Horror: Is DoEvents Evil?

+0

Je me demande pourquoi .net n'inclut pas une méthode "DoSomeEvents" qui gérerait certaines des choses nécessaires pour que l'interface soit réactive, sans manipuler des choses comme des pressions de bouton? Il existe des moyens d'obtenir un tel effet, mais ils sont maladroits. – supercat

2

"Je ne recherche pas de technologies multithread ou de type background worker."

Lequel de ces souhaits est le plus important pour vous? Vous devrez choisir l'un ou l'autre.

Questions connexes