Bonsoir,

je souhaite rafraichir mes équipements quand il y a un changement d'état, et le problème c'est qu'à aucun moment je ne le fais.
onChange est toujours à null. Dois je l'instancier? Comment? où?

j'ai une classe équipement avec:

delegate void changementEtat(Equipement sender);

public event changementEtat onChange;

private void change()
{
if (onChange != null) onChange(this);
}
j'apelle change dans cette même classe:
private void TraitementMessage(string message)
{
lastMessage = message;
Date_Dernier_Message = DateTime.Now;

if (message.EndsWith("!"))
{
//message Ok
TraitementMessageOk(message);
bEtat = true;
}
if (message.EndsWith("?"))
{
//message non Ok
bEtat = false;
}
//
//client.Close();
//client = new TcpClient();
change();
}

private void Fluxentrant(IAsyncResult result)
{
int nbOctetsLus;
try
{
nbOctetsLus = client.GetStream().EndRead(result);
}
catch
{
nbOctetsLus = 0;
}


if (nbOctetsLus != 0)
{
// converti les octets lus en chaine de caractère
string returndata = System.Text.Encoding.ASCII.GetString(inStream, 0, nbOctetsLus);
// on ajout les caractères reçus aux éventuelles trames déjà reçu précédemment
TramesRecues += returndata;
DecompositionMessagesReçus();
}
else
{
bEtat = false;
//Console.WriteLine("Etat=false");
change();
}
Quand je change d'état je veux rafraichir mes icônes sur ma form, code de ma form Ecran_2O, dans le load:
Eq.onChange += Icone_onChange;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
private void Icone_onChange(Equipement sender)
{
Invoke(new MethodInvoker(Refresh));
}
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
 
private void Icone_Paint(object sender, PaintEventArgs e)
{
//lequel icone est relacher
PictureBox Icone = sender as PictureBox;
 
//liée equipement à l'icone
Equipement Eq = Icone.Tag as Equipement;
 
if (Eq.bEtat==true)
e.Graphics.DrawRectangle(new Pen(Color.Green, 5), pictureBox1.ClientRectangle);
else
e.Graphics.DrawRectangle(new Pen(Color.Red, 5), pictureBox1.ClientRectangle);
 
}
Merci d'avançe.
Cordialement,