Je débute dans le C#, langage qu’on me donne la possibilité d’apprendre via mon taf actuel, en me donnant a faire des interfaces de communication usb/serie. Et l’avantage, c’est qu’on me donne bien le temps de peaufiner mes tests, mon apprentissage et mon soft final pour avoir un logiciel utilisable (ben ouais).
J’ai pas encore bien compris l’intérêt de l’objet (meme si ca commence) et encore moins l’intérêt des interfaces (même si j’ai utilisé ICloneable dans un autre projet) mais j’imagine que ca va venir.
Pour l’instant, je cherche a fermer proprement mon application (un exit(0) en somme) et faire en sorte que ca ne plante pas l’application.
Je vous explique le fonctionnement général de l’application.
Sur mon projet, j’ai 3 forms
_Une form de detection COM (avec une barre de progression pour informer du scan des ports com et qui attends une data pour dire « ah ben c’est lui le bon port com »)
_Une form d’option (pour forcer le com)
_Une form principale.
Dans la methode « form_load » de la form principale, c’est ici que je cree ma form de détection com et que je l’exécute avant l’affichage de la form principale. Celle ci détecte les port com et stock dans une variable public le « bon port com » que je récupère en faisant:
DetectedCom= form_comdetect.ResultCom;
D’ailleurs, ca marche un peu magiquement parce qu’il suffit que je fasse
this.Hide();
return;
pour que le contrôle soit rendu a la form principale. D’ailleurs, vous notez que j’ai fait Hide et pas close, tout simplement parce que si je close, je ne pourrais plus lire ma donnée form_detect.ResultCom.
Je pense donc ici que je n’utilise pas forcement la bonne methode de gestion des form et que, peut etre, cela a un lien avec le probleme que je vais vous exposer maintenant. (la form d’option etant géré de la même manière)
_Le programme fonctionne parfaitement sur mon pc (xp pro)
_Idem sur vista
_Il peut (c’est pas systématique) faire un « hang » quand on clique sur le bouton rouge X en haut a droite de l’application sur le pc du chef de projet (ouais c’est con). Ce pc est équipé de la bonne version de .Net.
Donc j’ai investigué et j’ai vu que ma fonction d’arrêt ne fermait pas tout proprement. Donc j’ai fait en sorte qu’elle le fasse:
[code] void endofrun()
{
//software will end here: we need to close all the open thingies
//close the tick
graphe_time.Enabled = false;
//The datafile, if there is something we are still logging:
if (datafile != null)
{
datafile.Close();
datafile = null;
}
//close the com port.
sport.Close();
//close the forms
form_options.Close();
form_comdetect.Close();
//force close.
Environment.Exit(0);
//Application.Exit();
}[/code]
J’ai essaye les deux, Environment.Exit(0); et Application.Exit(); et ca ne change pas grand chose au problème, sachant qu’effectivement, j’ai pas compris la diff malgré la relecture de la doc. Plus précisément, j’ai compris le texte mais ca donne pas les résultats que j’aurais cru, notamment application.exit qui, des fois, exit pas. D’ailleurs, je suis en winform et je devrais pas utiliser Environment.Exit(0), mais l’utilisation de Application.Exit() ne change rien a mon problème.
La ou ca devient rigolo, c’est que j’ai créé un bouton « Quitter » qui est censé quitter l’application. Celui ci lance bêtement endofrun().
Quand, sur le pc du chef, on clique sur « quitter », ca marche a tout les coups. Si on clique sur la X rouge, ca hang 9 fois sur 10.
Ok donc j’utilise pas le bon événement lié a la X rouge pour lancer endofrun(). J’ai utilise les événements FormClosing, Leave et FormClosed. Ce dernier permet d’avoir un hang 9 fois sur 10 au lieu de 10 fois sur 10. J’ai aussi mis aucun événement et ca fait du 10/10 hanged. J’ai pas trouvé sur le net une info "la X rouge est lie a l’événement truc…
Pour apprendre le C#, j’ai utilisé les video qui etaient fourni sur le site de MS (que je retrouve plus, dommage c’etait bien fait) et le cours online de Serge Tahe, parfait pour les bases mais dans lequel il manque l’utilisation standard des forms (le basic est traite sur les video MS).
Donc en fait, y a deux questions:
_Ou est ce que je merde dans la fermeture de l’appli (qui marche sur mon pc et sur un pc vista), et quel moyen j’aurais pour tester tout ca?
_Une (bonne) référence sur les winforms, gratuite si possible?
merci d’avance pour tout piste, la plus insignifiante possible
LoneWolf
I want to know how deep the C# hole goes.