C# Console App + La Gestion Des Événements
Salut à tous. Je suis en train de voir sur la gestion des événements dans une application console. Je préfère ne pas utiliser le silence WinForms (même si je comprends que c'est un moyen) de le faire. J'ai lu sur une même question et sa réponse. Voir le texte de la réponse ci-dessous (lien):
La condition de base d'un thread STA
c'est qu'il doit exécuter un message
de la pompe. Dans les Windows Forms, vous pouvez utiliser
Application.Exécuter. Ou vous pourriez écrire
le message de la pompe à la main, à l'aide de
user32!GetMessage & DispatchMessage.
Mais c'est probablement plus facile d'utiliser le
on en WinForms ou WPF.
Ce que la structure de base d'un programme qui utilise "user32 -> GetMessage" & "user32 -> DispatchMessage"?
OriginalL'auteur bitcycle | 2009-04-19
Vous devez vous connecter pour publier un commentaire.
Voir la rubrique "Utilisation des Messages et des Files d'attente de Messages" dans MSDN (sous Win32 et COM de Développement > Interface Utilisateur > Expérience Utilisateur Windows > Windows Management > Interface Utilisateur de Windows > Fenêtrage > les Messages et les Files d'attente; vous aurez probablement besoin de prendre un coup d'oeil aux autres articles et des échantillons dans la même section). Résumé rapide, en omettant d'erreur de manipulation et d'utilisation de la syntaxe C plutôt qu'en C# pour des raisons discutées ci-dessous:
Comme vous pouvez le voir à partir de la fenêtre de configuration standard, ce repose toujours sur "le silence de windows," quoique créé et un message pompé via l'API Win32 plutôt que par les WinForms. Si vous n'êtes pas vraiment gagne rien en faisant de cette façon. D'où mon sentiment il n'y a pas beaucoup de point de traduire ce genre de choses en C# -- si la seule solution à votre problème est invisible de la fenêtre, vous pouvez aussi bien utiliser un invisible Formulaire Windows et tous les amicales des wrappers qui viennent avec cette plate-forme.
Toutefois, si vous n'êtes pas vraiment à l'aide d'un contrôle Windows Forms comme l'affiche de la question, alors vous pouvez tout à fait heureux de l'utiliser .NET événements dans une application console. La restriction de personnel et le besoin d'une pompe de message est spécifique à recevoir des événements de WinForms et les contrôles ActiveX comme le WebBrowser (ou les messages à partir de Win32 Hwnd, mais qui n'exige pas nécessairement STA).
OriginalL'auteur itowlson
Ce genre d'événements voulez-vous gérer? La configuration d'un message de la pompe vous permettra de Windows API messages. Mais puisque c'est une application console, je ne peux pas penser à une API de Windows messages qui pourraient être d'intérêt.
Nous avons tendance à penser à des "Événements" comme étant associés à des messages de Windows car les contrôles Windows Forms application répondre à la saisie de l'utilisateur à l'aide de Gestionnaire de délégués, qui sont appelés dans la réponse de l'API de Windows messages. Cependant, il n'y a aucune raison que vous ne pouvez pas utiliser les délégués dans une application console; et vous n'avez pas besoin d'une pompe de message. Vous pouvez même utiliser le Gestionnaire délégué, bien qu'il semble y avoir de la place car il ne sera pas resonding de l'API de Windows messages.
Bien sûr, il existe d'autres types de "événements" de ce que vous pourriez être intéressé par. La forme la plus commune de l'événement scénario impliquant une application console, c'est d'attendre d'entrée à partir de la console (stdin). Il est également fréquent pour bloquer un WaitHandle ou autre objet de synchronisation si il y a plusieurs threads en cours d'utilisation. Deux de ces cas pourraient être considérés comme un type de gestion des événements.
Si vous créez une fenêtre masquée (un temps honoré de pratique), vous aurez toujours besoin d'un message de Windows pour y répondre. La question est donc: à quoi, ou à qui, êtes-vous essayer de répondre?
Non, la ligne de commande de processus ne recevez pas de message WM_CLOSE si elles sont abandonnées. Afin d'intercepter et d'annuler, de mettre en œuvre une console ctrl gestionnaire: msdn.microsoft.com/en-us/library/ms686016(SV.85).aspx Pour un lot qui doit être en mesure d'abattre gracieusement, je regarde le déploiement d'un processus de service plutôt que d'un lot.
Un événement comme "KeyDown" "KeyRepeat" "KeyRepeat" "KeyRepeat" "KeyUp".
OriginalL'auteur Paul Keister
Je voudrais utiliser l'Application.Méthode Run. Je ne pense pas que cela crée une fenêtre masquée automatiquement, c'est juste des pompes les messages, qui est ce que vous avez besoin pour satisfaire le personnel de l'exigence.
D'écrire votre propre message de la pompe à l'aide de PInvoke n'offre aucun avantage et du Système de référence.De Windows.Les formes n'est pas un fardeau, car il est déjà sur toutes les machines que vous pouvez rencontrer.
OriginalL'auteur