6
votes

La boucle principale de l'interface grise Windows en C # ... Où est-ce?

J'ai une application de formulaire Windows en C # et j'essaie de comprendre où je voudrais implémenter l'application CLI équivalente du primaire tandis que la boucle principale (). J'utilise les concepteurs d'interface graphique Visual C #.

Edit: Problème résolu avec une instance de minuterie.


4 commentaires

Je soupçonne que tu penses à cela au mauvais niveau. Vous pouvez aussi bien demander «où dans mon programme C #», les données de certains polygones sont déplacées vers le GPU sur certains bus. Ces idées ne sont pas des concepts dans la langue C #, ce sont des détails de la mise en œuvre des bibliothèques, des langues et des heures d'exécution abstraites pour vous. L'ensemble des formulaires de Windows en C # est de vous assurer que vous n'avez plus jamais à penser à des boucles de messages. Oui, des programmes axés sur les événements sont construits sur des messages Windows; Parfois, l'abstraction fuit, mais vous ne devriez pas avoir besoin de parler directement au niveau du message dans la plupart des cas normaux.


@Orm: l'exemple que vous avez lié est un code très mal écrit. Si vous l'utilisez, je vous recommande de l'utiliser comme référence pour éviter.


Je suis et oui c'est une façon de la merde de le faire. J'ai essayé et ça n'a pas du tout travaillé du tout.


Si vous savez ce que vous essayez d'accomplir, vous pouvez rechercher ou poser une autre question à ce sujet spécifiquement, maintenant que vous savez que ce n'est pas ce que vous pensiez à l'origine. Sans ces détails, il est difficile de dire plus que ce que Eric a dit (qui est généralement vrai pour l'une de ses réponses).


3 Réponses :


13
votes

10 commentaires

SHYPSIMULATOR: Que voulez-vous dire? Application.Run établit une boucle de message. En interne, il appelle la fonction getMessage Win32 API dans une boucle.


Mais alors comment puis-je ajouter ma logique de mes programmes? Par exemple, si je voulais que le programme imprime continuellement "ça marche!" à un widget (ajouter du texte que j'ai compris, widget.text + = "Ça fonctionne!";).


Vous utiliseriez une minuterie pour cela et ajoutez du texte à chaque fois que le minuteur déclenche.


Le formulaire classe et contrôle que vous l'ajoutez à augmenter les événements. Vous gérez ces événements et faites des trucs en conséquence. Vous pouvez consulter le code généré par le concepteur de formulaire Visual C # dans le fichier myform.designer.cs .


Très bien, tous les exemples de son utilisation de cette manière? Ou peut-être que je pourrais le comprendre d'ici. Merci de votre aide.


Le problème est que j'essaie de faire vérifier les données de l'application dans un tampon des sockets. IU Cela n'a tout simplement pas eu d'indice où impliquer la boucle pour faire ce qui serait normalement fait de cette manière: [Code] Void Main () {tandis que (vrai) {// programme exécute ici}}}}}}}}}}}}}}}}}}}}}}}}}}}}}


@Orm: Vous n'avez pas besoin ou que vous ne voulez pas faire cette vérification dans une application .NET, car vous avez des E / S asynchrones disponibles (socket.beginreceive, socket.beginsend sont deux exemples) qui sont supérieurs à tous égards.


J'ai toujours besoin de savoir comment faire cela pour des raisons autres que les sockets.


@Orm: Quelle que soit la tâche que vous avez la tâche, il y a presque sûrement un moyen plus propre de le faire. Un coup d'œil curseur au processus de réflexion "Les prises? Boucle principale. UI? La boucle principale ..." laisse une façon sain d'accomplir des choses. Si vous rencontrez des difficultés de découvrir comment le .NET Framework a été construit pour vous aider avec une tâche, je suis sûr que 1) quelqu'un d'autre a déjà eu la même question ou 2) les personnes ici seraient heureux de vous indiquer dans le bonne direction. Il suffit de trouver un moyen d'exprimer votre tâche actuelle et nous irons de là.


Ma tâche actuelle était de comprendre comment je peux implémenter la version CLI régulière d'une boucle principale de Wile. Le problème a été résolu, même si je suis sûr que ce que vous dites est vrai. Il y a un moyen plus propre ou plus efficace de faire ce que j'ai fait. Ce sera une question pour une autre fois cependant. Pour l'instant, cela fonctionne, donc je suis bon.




0
votes

essayer de lire . La langue n'est pas trop claire et le code est vb, mais il devrait obtenir le point à travers.


0 commentaires