[C# et Windows] ne font pas bon ménage ???

Signaler
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour,
voilà un p'tit souci que je vous soumet :

J'ai développé une appli C# (une mini GED en quelque sorte) qui est sensée être ouverte sur tous les postes clients de mon parc informatique...
Le problème survient lorsque je veux éteindre un PC...

L'appli comporte une icône systray, celle-ci se ferme bien mais le processus de l'appli reste ouvert et empêche la fermeture de Windows...

Après avoir fermé le processus (via Gestionnaire des tâches) et redemandé l'arrêt du système, tout roule impec...

Est-ce que quelqu'un a déjà rencontré ce problème...

Pour info, j'ai amélioré cette appli en plusieurs fois (plusieurs versions différentes)...Et c'est juste quand j'ai mis à disposition la dernière version que le problème est survenu...Et la dernière version ne comporte pas de grands changements...


Quelqu'un peut-il m'aider ???

7 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
par hazard... n'aurais-tu pas intercepter la fermeture de ton application pour la mettre dans le systray ?

Sébastien FERRAND
[MVP C#]
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Salut,

Je suppose que sur le closing tu annules la fermeture pour mettre en systray.
Utilises les events exposés par SystemEvents pour détecter l'arrêt/la fermeture de session.
En particulier SessionEnding.

/*
coq
MVP Visual C#
*/
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
2
Effectivement, j'intercepte la fermeture de la form, et quand l'événement onclosing se produit, j'exécute ceci :

- systray.Dispose();
- Application.Exit();

Mais ce code existait déjà dans mes versions précédentes...

Je vais regarder ta proposition Coq...

Merci à vous 2 de m'avoir répondu aussi rapidement... :)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
Ah non mais là c'est différent, si tu fermes l'appli dans le OnClosing.
Du coup à ressemble plutôt à un oubli d'arrêt de thread.

/*
coq
MVP Visual C#
*/
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
ouaip... le Application.Exit() est de trop dans le OnClosing...

Sébastien FERRAND
[MVP C#]
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
2
Rectification :
- en fait je vous ai dit une bétise, l'instruction Application.Exit() n'était pas dans le MainFormClosing...


J'ai refait un test en la rajoutant après le systray.Dispose() et ça roule, l'appli se ferme bien...
Apparemment quand on intercepte l'événement MainFormClosing, ça annule la fermeture ???
En théorie faudrait faire un "e.Cancel = true;" pour annuler la fermeture...
Donc je vois pas pourquoi ça ne se ferme pas sans Application.Exit()...

Enfin bref du moment que ça marche... :)

Merci de m'avoir aider aussi vite... :)

A plus sur le forum...
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
92
La fermeture du formulaire est ce qu'elle est : la fermeture du formulaire, pas de l'application.
Le processus est détruit après le formulaire principal, mais seulement si il n'y a plus de thread actif, sinon le/les thread(s) en question continue(nt) de faire son/leur boulot.
Application.Exit ne fait pas dans le détails : tous les threads sont fermés pour permettre la fin du processus.

/*
coq
MVP Visual C#
*/