skyline86
Messages postés29Date d'inscriptionmardi 21 octobre 2008StatutMembreDernière intervention 5 décembre 2009
-
27 févr. 2009 à 11:59
skyline86
Messages postés29Date d'inscriptionmardi 21 octobre 2008StatutMembreDerniè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();
}
/* 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
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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...)
skyline86
Messages postés29Date d'inscriptionmardi 21 octobre 2008StatutMembreDernière intervention 5 décembre 20091 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.