C# - Erreur NullReferenceException

Résolu
skyline86 Messages postés 29 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 5 décembre 2009 - 27 févr. 2009 à 11:59
skyline86 Messages postés 29 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 5 décembre 2009 - 27 févr. 2009 à 16:06
Bonjour, 'ai un message NullReferenceException
sur la ligne



    Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog(Program.monFormulaire.log), new object[] { resultat });

et je ne comprend pas pourquoi cela ne fonctionne pas. Est ce que quelqu'un peut m'aider ???

Fichier 1 : Program.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;

    namespace GPRSListener
    {
    static class Program
    {
    public static Principale monFormulaire;
    /// <summary>
    /// Point d'entrée principal de l'application.
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Principale());
    }
    }
    }

Fichier 2 : principale.cs :

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using MySql.Data.MySqlClient;
    using System.Net.Sockets;
    using System.Net;
    using System.IO;
    using System.Collections;
    using System.Threading;

    namespace GPRSListener
    {
    public partial class Principale : Form
    {
    private List maListeBoitier = new List();
    private List<TCPConnexion> maListeTCPConnexion = new List<TCPConnexion>();
    private MySQL maConnexion;
    private Thread monThread = null;
    private IPAddress IPlocal = IPAddress.Parse("127.0.0.1");
    public delegate void affichageLog(string msg);

    public Principale()
    {
    InitializeComponent();
    maConnexion = new MySQL("127.0.0.1", "3306", "opthortest", "root", "root");
    }

    private void btn_ecouter_Click(object sender, EventArgs e)
    {
    MySqlDataReader monReader = maConnexion.execute_select_multi("SELECT id_device_affect as 'boitier' FROM affect_device WHERE '" + DateTime.Today.ToString("yyyy-MM-dd") + "' BETWEEN start_date AND end_date");

    // création des objets Boitier
    while (monReader.Read())
    {
    maListeBoitier.Add(new Boitier(monReader.GetInt32("boitier")));
    }

    // création des TcpListener en fonction de la liste des Boitiers
    for (int i = 0; i < maListeBoitier.Count; i++)
    {
    maListeTCPConnexion.Add(new TCPConnexion(maListeBoitier[i].get_port()));
    }
    }

    public void log(string msg)
    {
    lb_log.Items.Add(msg);
    int index = lb_log.Items.IndexOf(msg);
    lb_log.SetSelected(index, true);
    }
    }
    }

Fichier 3 : Boitier.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using MySql.Data.MySqlClient;

    namespace GPRSListener
    {
    public class Boitier
    {
    /* ***********************************************************
    * ATTRIBUTS
    * ********************************************************* */
    private MySQL maConnexion2;
    private int idBoitier;
    private string nomBoitier;
    private int port;
    private int idBus;
    private string nomBus;
    private int idReseau;
    private string nomReseau;
    private int idCampagne;
    private string nomCampagne;

    /* ***********************************************************
    * CONSTRUCTEUR
    * ********************************************************* */
    public Boitier(int boitierID)
    {
    // Ouverture d'un nouvelle connexion à la base de données
    maConnexion2 = new MySQL("127.0.0.1", "3306", "opthortest", "root", "root");

    this.idBoitier = boitierID;

    /* Récupération du port correspondants au boitier*/    port int.Parse(maConnexion2.execute_select_unique("SELECT port FROM device WHERE id_device " + boitierID));    MySqlDataReader monReader maConnexion2.execute_select_multi("SELECT id_bus_affect as 'bus', id_campaign_affect as 'campagne' FROM affect_device WHERE id_device_affect " + idBoitier + " AND '" + DateTime.Today.ToString("yyyy-MM-dd") + "' BETWEEN start_date AND end_date");

    if (monReader.Read())
    {
    idBus = monReader.GetInt32("bus");
    idCampagne = monReader.GetInt32("campagne");
    }
    monReader.Close();
    idReseau int.Parse(maConnexion2.execute_select_unique("SELECT id_network_campaign FROM campaign WHERE id_campaign " + idCampagne));

    /* Récupération des noms correspondants aux Identifiants */    nomBoitier maConnexion2.execute_select_unique("SELECT name FROM device WHERE id_device " + idBoitier);    nomCampagne maConnexion2.execute_select_unique("SELECT name FROM campaign WHERE id_campaign " + idCampagne);    nomBus maConnexion2.execute_select_unique("SELECT name FROM bus WHERE id_bus " + idBus);    nomReseau maConnexion2.execute_select_unique("SELECT name FROM network WHERE id_network " + idReseau);
    maConnexion2.close();
    }

    /* ***********************************************************
    * METHODES
    * ********************************************************* */

    /* Retourne l'ID du Boitier */
    public int get_idBoitier()
    {
    return idBoitier;
    }

    /* Retourne le numéro de port */
    public int get_port()
    {
    return port;
    }

    /* Retourne l'ID du Bus */
    public int get_idBus()
    {
    return idBus;
    }

    /* Retourne l'ID du Réseau */
    public int get_idReseau()
    {
    return idReseau;
    }

    /* Retourne l'ID de la Campagne */
    public int get_idCampagne()
    {
    return idCampagne;
    }

    /* Retourne le nom de la Campagne */
    public string get_NomCampagne()
    {
    return nomCampagne;
    }

    /* Retourne le nom du Réseau */
    public string get_NomReseau()
    {
    return nomReseau;
    }

    /* Retourne le nom du Bus */
    public string get_NomBus()
    {
    return nomBus;
    }

    /* Retourne le nom du Boitier */
    public string get_NomBoitier()
    {
    return nomBoitier;
    }
    }
    }

Fichier 4 : TCPConnexion.cs :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net.Sockets;
    using System.Windows.Forms;
    using System.Threading;

    namespace GPRSListener
    {
    public class TCPConnexion
    {
    private TcpListener monListener = null;
    private TcpClient monClient = null;
    private int portTCP;
    private NetworkStream ns;
    private Thread monThread = null;
    private byte[] data;
    private int recv;

    public TCPConnexion(int port)
    {
    this.portTCP = port;
    this.monListener = new TcpListener(portTCP);
    this.monListener.Start();

    // Acceptation d'une nouvelle connexion
    this.monClient = this.monListener.AcceptTcpClient();
    ns = this.monClient.GetStream();

    //lancement de l'écoute
    this.ecouter();
    }

    private void ecouter()
    {
    try
    {
    if (monClient.Connected)
    {
    // Création et lancement d'un nouveau Thread
    monThread = new Thread(recupData);
    monThread.Start();
    }
    else
    {
    MessageBox.Show("Erreur de connexion : port : " + portTCP);
    }
    }
    catch (SocketException ex)
    {
    MessageBox.Show("Erreur TCPConnexion Port : " + portTCP + " : " + ex.ToString());
    }
    }

    private void recupData()
    {
    while (true)
    {
    data = new byte[1024];
    recv = ns.Read(data, 0, data.Length);

    if (recv == 0)
    {
    break;
    }
    else
    {
    string resultat = "";
    for (int i = 0; i < recv; i++)
    {
    if (data[i] == 13)
    {
     Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog(Program.monFormulaire.log), new object[] { resultat });
    resultat = "";
    }
    else
    {
    resultat = resultat + Encoding.ASCII.GetString(data, i, 1);
    }
    }
    }
    ns.Write(data, 0, recv);
    }
    }

    public void Stop()
    {
    if (monListener != null)
    {
    monListener.Stop();
    }

    if (monThread != null)
    {
    monThread.Abort();
    }
    }
    }
    }

Le problème vient peut être du Thread ou de delegate, mais je n'arrives pas à résoudre cette erreur

Merci de me venir en aide ...

Merci d'avance

4 réponses

skyline86 Messages postés 29 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 5 décembre 2009 1
27 févr. 2009 à 16:06
C bon cété le delegate qui n'été pas déclaré dans le bon fichier. Merci
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
27 févr. 2009 à 12:32
Salut

Tu as regardé quel objet était null dans ton instruction ?
(Lorsqu'une exception est levée en mode Debug sous visual studio, ça fait automatiquement un point d'arrêt, donc tu peux mettre ta souris sur chaque objet dans ton code pour voir sa valeur, ses propriétés...)

Krimog :
while (!succeed = try()) ;
0
skyline86 Messages postés 29 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 5 décembre 2009 1
27 févr. 2009 à 15:32
Bas en faite la valeur NULL si j'ai bien débuggé est monFormulaire dans le dernier fichier et je ne comprend pas pourquoi il ne veut plus accéder a cette variable.

Pourriez vous m'aider SVP....

Cordialement
0
skyline86 Messages postés 29 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 5 décembre 2009 1
27 févr. 2009 à 15:37
Je sais pas trop car j'ai également affichageLog le delegate
0
Rejoignez-nous