IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Comment eviter Exception pendant que programme en pause? [Débutant(e)]


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut [C#]Comment eviter Exception pendant que programme en pause?
    Bonjour,

    J'ai programmé le jeu Othello en C# tout fonctionne sauf que j'ai un petit probleme: Quand l'ordinateur est en train de refléchir si je vai faire autre chose sur windows (genre changer de musique ), j'ai une exeption qui arrive (la classique) : probleme de Reference d'objet.

    Alors je supose que cela provient du fait que le programme est mis en pause et qu'il aime pas la reprise, ou encore qu'il y a une perte d'information quand je clique sur un element exterieur au programme. Bref c'est génant.

    Si vous avez une solution elle sera bienvenue

    Merci

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Comme ton projet soutend une application Windows, il est bien possible que celà soit un souci de multithreading mal géré. Il faut que tu en dise plus pour que nous puissions t'aider concrètement.

  3. #3
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Voici le message d'erreur exact, si ca peut t'aider ?

    ************** Texte de l'exception **************
    System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.
    at Othello.FormOthello.FindControl(String control) in c:\documents and settings\administrateur\mes documents\visual studio projects\othellonew\othello.cs:line 23
    at Othello.FormOthello.PrintGrid() in c:\documents and settings\administrateur\mes documents\visual studio projects\othellonew\othello.cs:line 261
    at Othello.FormOthello.PrintScreen() in c:\documents and settings\administrateur\mes documents\visual studio projects\othellonew\othello.cs:line 178
    at Othello.FormOthello.AlkaiosPlay(Int32 Computer) in c:\documents and settings\administrateur\mes documents\visual studio projects\othellonew\othello.cs:line 1712
    at Othello.FormOthello.Buttons_Click(Object sender, MouseEventArgs e) in c:\documents and settings\administrateur\mes documents\visual studio projects\othellonew\othello.cs:line 1485
    at System.Windows.Forms.Control.OnMouseDown(MouseEventArgs e)
    at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    Et ca c'est ce qu'il se passe quand je clique sur une case de la grille de jeu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    		private void Buttons_Click(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			if (e.Button==MouseButtons.Left)
    			{					
    				int i,j;
    				for (i=0;i<8;i++)
    				{
    					for (j=0;j<8;j++)
    					{
    						if(sender==FindControl("B"+i.ToString()+j.ToString()))
    						{
    							PlayerPlay(i,j);
    							if(!HumanVsHuman)
    							{
    								AlkaiosPlay(AlkaiosCoin);
    							}
    						}
    					}
    				}
    			}
    		}

    A savoir aussi : L'ordi crée un arbre des possibilités de pronfondeur variable mais la c'est 6 et choisi la meilleur possibilité grace a Minimax.


    Merci de ton aide

  4. #4
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Heu j'ai surtout besoin de savoir comment tu mets ton programme "en pause" comme tu dit. Car comme je tente de supposer, le fais-tu par un nouveau thread ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Ok désolé pour les informations inutiles.

    En fait je le met pas en pause dutout, c'est juste que si je clique sur n'importe qu'elle autre programme de windows ca plante au milieu de la réfléxion. J'ai dit en pause parce que je supose que windows le met en pause tout seul. Mais moi j'ai pas envi que ca se mette en pause, si ca pouvait continuer en arriere plan ca eviterai que ca plante peut etre.

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Es-tu sous Framework 2.0 ? car dans ce cas tu as le BackgroundWorker qui pourrait optimiser la thread de traitement. De toute manière je t'invite à la gestion du multithreading dans cette affaire en separant bien la couche graphique de la couche "business"

  7. #7
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Je vien de bien regarder le multithreading et j'ai fait pas mal de test (qui ont aboutis a la meme erreur) mais franchement je sait pas si mon probleme vien de ca vu que je n'ai pas de taches simultanées.

    En fait (je le répéte encore pour etre bien sur que nous nous sommes compris), Si je clique n'importe ou en dehors de l'application ca plante car l'algorithme n'aboutis pas.

    A la limite empeché le clique en dehors de l'application pendant que ca réfléchi ca me suffirai ( méme si cela est pénible pour l'utilisateur).

    merci

  8. #8
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Tonn souci est tout à fait anormal et sans informations précise' sur le codage de ton appli (par exemple par quelle instruction est affiché l'interface graphique du plateau> fenêtre modale ou non etc...), je ne vois pas trop comment comprendre ou débrouiller cette affaire

  9. #9
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Bonjour,

    Frenchement je n'ai aucune idée d'ou provient le probleme. C'est la premiere fois qu'un truc pareil m'arrive.
    Mes connaissance ne sont pas assez développées pour connaitre ce qu'il se passe l'orsqu'un utilisateur clique a l'exterieur d'une application.
    Mais dans mon cas, il y a une perte d'information (enfin je supose) car j'ai une exeption du type : la reference do'bjet n'est pas défini a une instance d'un objet.

    Je sait pas dutout si quelqu'un a dejà eu ce probleme mais j'aimerai bien car la je suis vraiment bloqué. Mon application est fini et seul ce probleme persiste, malheureusement c'est le plus pénible de tous pour l'utilisateur.

    Je peu donnée des information suplementaires mais je ne sait aps si elles vont vous aider :
    Mon abre :

    Un objet plateau contenant une collection d'objet plateau conetant eux meme une collection d'objet plateau.

    Quand je clique sur une case: affichage de la nouvelle grille-> réfléxion de l'ordi-> affichage de la nouvelle grille.

    Si je clique hors de l'application pendant tout ca -> exeption.
    sinon tout se passe a merveille.

    Voila je ne voit pas quoi donnée comme information suplementaire.

    Merci de votre aide

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Par défaut
    tu peut toujours utiliser la methode de bill gates
    tu capte ton exception et tu affiche un message:
    vous avez effectuer une operation non conforme vous devez redemarer votre ordi
    ou encore mieux : tu catch l'exception et tu n'affiche rien comme ça l'erreur ne vient pas de ton prog et l'utilisateur ne s'en rend pas compte (camoufler l'erreur pour ne pas se faire accuser)

  11. #11
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Ouai je l'avai fait mais j'aime pas. Moi je veu que ca marche parfaitement
    Merci quand meme

  12. #12
    Membre averti
    Inscrit en
    Juin 2004
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 41
    Par défaut
    Ouai je l'avai fait mais j'aime pas. Moi je veu que ca marche parfaitement
    Merci quand meme

    Bonsoir,
    Bon voila j'etait entrain d'optimiser mon code et j'ai trouver l' "erreur".
    C'etait juste que pendant l'afficage de la grille (donc apres un coup de l'ordinateur) j'appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormOthello.activeform.Controls
    Il aime pas dutout.

    Pendant que j'optimiser je l'ai renomé en :
    Maintenant il n'y a plus aucun probleme.
    C'est de la bombe, j'ai fini mon projet.
    Plus que le rapport de 10000 mots (en anglais sinon c'est pas drôle) youpi


    Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment eviter que mes programme soient détéctés comme virus
    Par flamme34 dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 12/11/2013, 00h28
  2. Réponses: 3
    Dernier message: 02/11/2009, 21h40
  3. [VBA -E] Sablier pendant que le programme VBA tourne
    Par antoine.dandois dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/03/2007, 19h12
  4. Réponses: 5
    Dernier message: 18/04/2006, 16h53
  5. [FreePascal] Comment éviter que la console se ferme
    Par Thiboz dans le forum Free Pascal
    Réponses: 5
    Dernier message: 14/08/2005, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo