skyline86 | Bonjour, j'ai un message NullReferenceException
sur la ligne
Citation :
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 :
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 qui est null mais je suis pas sûr
Merci d'avance |