Bonjour à tous,
Je fais appel à votre aide car je rencontre quelques difficultés dans la définition de l'architecture du futur logiciel de ma société.
Je vous expose donc l'idée de base sur laquelle je travaille
En ce qui concerne l'environnement technique, je travaille sous Visual Studio 2015 en C# et mes applications doivent tourner sur un Windows 10 classique.
Je souhaiterais réaliser le système suivant :
- Un service Windows qui exposera un service WCF.
- Ce même service Windows aura la possibilités de faire apparaître des bulles de notification. Actuellement les notifications sont gérées par l'objet NotifyIcon, développé par Philipp Sumi (http://www.hardcodet.net/wpf-notifyicon), hébergé dans une fenêtre WPF.
- Une autre application WPF proposera une ihm exposant un bouton et un champ de saisie. Lorsque l'utilisateur cliquera sur le bouton, les informations contenues dans le champ de saisie seront récupérées et communiquées au service WCF. Le service WCF devra ensuite pouvoir demander à l'objet NotifyIcon d'afficher les informations qui lui ont été transmises par la seconde application.
J'ai pour l'instant réussi à héberger mon service WCF dans mon service Windows. J'arrive bien à consommer le service WCF depuis la seconde application pour communiquer les données contenues dans le champ de saisie. C'est à partir de là que ça coince...
J'avais initialement chargé le service WCF lui-même d'instancier l'objet NotifyIcon afin de faire apparaître la notification, j'ai obtenu un message d'erreur m’indiquant que « Le thread appelant doit être en mode STA »… En me renseignant, j’ai cru comprendre qu’un nouveau Thread était créé pour exécuter les fonctions contenues dans mon service lorsque la seconde application y fait appel et qu’il est impossible de mettre à jour une IHM « en direct » en dehors du thread principal de mon application. Fort de ce constat (et après avoir compris que de toute façon le fait d’instancier un nouvel objet NotifyIcon à chaque utilisation de mon service WCF était une très mauvaise idée…) j’ai déclaré un NotificationManager, instancié au démarrage du service Windows, instanciant lui-même l’objet NotifyIcon. L’idée était qu’à chaque appel de la fonction ajoutNotification() de mon service WCF, le NotificationManager soit informé qu’il doit générer une nouvelle notification.
Mon problème actuel est que je n’arrive pas à faire en sorte que mon service WCF « communique » avec le NotificationManager pour l’informer qu’une nouvelle notification doit être affichée…
Avez-vous une solution, idée, piste pour me permettre d’avancer sur mon problème ?
J’espère avoir été assez clair, si ce n’est pas le cas n’hésitez pas à me demander plus d’informations.
Je vous remercie par avance !
Partager