Vous devriez éviter l'architecture que vous envisagez. Obtenir deux processus distincts pour travailler ensemble est compliqué. Le système d'exploitation met en place un grand mur entre les processus pour s'assurer qu'un processus qui ne se comporte pas correctement ne peut pas déstabiliser l'autre. Les processus ont chacun leur propre vision de la mémoire, Windows (et .NET en particulier), il est très difficile pour les processus de partager de la mémoire.
Vous devrez établir un canal de communication entre les processus pour les faire fonctionner ensemble. Un tuyau ou une douille est le choix habituel, le modèle mental ici est celui des machines qui se parlent sur un réseau. Cela peut être très gênant, vous auriez tous les inconvénients d'une application web, aucun des avantages d'un client WinForms ou d'une application en mode console. Il est également très peu fiable, l'échec d'un processus est difficile à diagnostiquer, à signaler et à récupérer par l'autre application. Je suis sûr que vous avez vu ce qui peut mal se passer lors de l'utilisation de votre navigateur Internet.
Vous pouvez obtenir ce que vous voulez d'une application. La classe System.Threading.Thread vous donne l'équivalent moral de votre application en mode console.Obtenir l'interface utilisateur pour afficher les messages du thread de cerveau est assez simple avec la classe BackgroundWorker ou la méthode Control.Begin/Invoke(). Seulement "assez" btw, obtenir le fil interop droit est toujours un effort.
Il existe deux façons d'implémenter la mise à jour de l'action boursière. La poussée par rapport à l'approche par traction. L'approche push permet au thread d'arrière-plan de notifier activement le thread d'interface utilisateur qu'une mise à jour est disponible. BackgroundWorker.ReportProgress ou Control.Begin/Invoke pour faire cela. À 200 msec mises à jour, ce n'est pas un problème.
À des taux comme celui-ci, le modèle de traction fonctionnera tout aussi bien. Vous utiliseriez un temporisateur dans l'interface utilisateur pour obtenir une méthode à exécuter périodiquement. Il pourrait lire la valeur d'une propriété partagée dans la méthode Tick du timer. Vous devrez utiliser l'instruction lock dans le thread d'arrière-plan et dans la méthode Tick pour vous assurer que la valeur ne peut pas changer au moment où le thread de l'interface utilisateur lit la valeur. Vous devriez privilégier le modèle pull lorsque la valeur peut changer très rapidement, en poussant à une vitesse qui mettra le thread de l'interface utilisateur à genoux lorsque le temps nécessaire pour mettre à jour l'interface utilisateur est plus long que la période entre les mises à jour du thread d'arrière-plan . Le fil de l'interface utilisateur va prendre du retard et ne va pas à ses fonctions normales. Une interface gelée est le diagnostic, OOM est le résultat final. 200 ms ne devrait pas être un problème, sauf si vous êtes très chic ou bâclé avec vos mises à jour de l'interface utilisateur, la poussée devrait fonctionner.
Je vais devoir rejoindre la ligue d'amis que vous avez consultés sur les serveurs Telnet. Je ne sais pas quel problème ils résolvent, ils sont l'équivalent en 1990 d'un serveur web quand tout le monde utilisait un terminal à écran vert pour parler à un ordinateur. Cela s'applique peut-être à la nécessité de connecter une application en mode console séparée à une application d'interface utilisateur. Vous n'utilisez pas telnet pour le faire, une socket est un canal générique. .NET Remoting ou, mieux, WCF est la couche qui se trouve au-dessus de ce canal pour éviter d'avoir à faire face aux complications de compression de données ou de paramètres de méthode à travers un tuyau d'octets. Poursuivre que si vous êtes déjà complètement dans une solution multi-processus déjà. Vous ne devriez pas être pour une application ticker boursier, personne ne se soucie de quelle façon ils cocher s'il n'y a personne pour les regarder. Chute d'arbre dans la forêt, peut-être.
Salut Steven, ok, mais ne devrais-je pas faire l'interface utilisateur un processus séparé et parler avec le "cerveau" via RPC/IPC/pipe/whatsoever? ce n'est pas seulement un ticker, il contient aussi des boutons, listview, etc. – Eyalk