[RESOLU] - [C#] - NullReferenceException

- NullReferenceException [RESOLU] - [C#] - C#/.NET managed - Programmation

Marsh Posté le 27-02-2009 à 15:46:04    

Bonjour, j'ai un message NullReferenceException
sur la ligne
 

Citation :

Program.monFormulaire.lb_log.BeginInvoke(new GPRSListener.Principale.affichageLog(Program.monFormulaire.l­og), 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 :
 

Citation :

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 :
 

Citation :

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<Boitier> maListeBoitier = new List<Boitier>();
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 :
 

Citation :

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 :

Citation :


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)
{
// MessageBox.Show(resultat);
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 ...
 
Je penses que c'est

Citation :

affichageLog

qui est null mais je suis pas sûr
 
Merci d'avance

Message cité 1 fois
Message édité par skyline86 le 27-02-2009 à 16:08:15
Reply

Marsh Posté le 27-02-2009 à 15:46:04   

Reply

Marsh Posté le 27-02-2009 à 15:58:20    

Laisse moi deviner, humm,
 
Tu est débutant et tu vient du PHP ou du C sans être passer par la case POO. J'ai bon ?

Reply

Marsh Posté le 27-02-2009 à 16:00:36    

Pourquoi ? Qu'est ce qui te fait dire ça ?

Reply

Marsh Posté le 27-02-2009 à 16:01:14    

Bonjour,
 
Je n'ai pas vraiment le temps de me pencher sur ton code là, mais une petit question : ne peux tu pas debugger ça avec visual studio pour voir précisément quel objet est nul, et l'état de tes autres variables?
ça t'aiderait grandement je pense...

Reply

Marsh Posté le 27-02-2009 à 16:04:47    

J'ai trouver je décléré pas le delegate dans le bon fichier.

Reply

Marsh Posté le 27-02-2009 à 16:05:00    

skyline86 a écrit :

Bonjour, j'ai un message NullReferenceException
sur la ligne

 
Citation :

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



euh, tu le sors d'où ce BeginInvoke() ? [:what has been seen]

 

edit: ah ok, j'imagine que lb_log doit être un Listbox


Message édité par Harkonnen le 27-02-2009 à 16:07:49

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed