Changement de "delegate"

Signaler
-
 j_michel_g -
Bonjour à tous,
Je suis en train d'explorer le mécanisme des délégués .... et je me perds !
Tel que je le comprends, c'est du pointeur sur de la fonction !
Bon, c'est certainement plus fin, et très lié à l'évènementiel Windows, mais cette utilisation "pointeur sur fonction" me va bien.
En effet, je voudrais envoyer des lignes de texte lues sur un port série à une méthode sur une classe parente.
Mon problème est que la première ligne est toujours à jeter car incomplète.
Donc mon plan est celui là : ( see lelow )
Toute indication sera la bienvenue.
Merci d'avance

class clSerialPort
{
private SerialPort port;

public delegate void delegateProcess(string s);
public delegateProcess Process;

public clSerialPort(string comport, clNavigateur theNav)
{

port = new SerialPort(comport, 2400, Parity.Even, 8, StopBits.One);

Process = new delegateProcess(theNav.Init);

port.Open();
Console.WriteLine("Port is opened");
System.Console.ReadKey();

if (port.IsOpen)
{
System.Console.ReadKey();
port.Close();
}
}

private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Process((string)port.ReadLine());
}
}


class clNavigateur
{
private clSerialPort theSerPo;

public clNavigateur()
{
// le port serie
theSerPo = new clSerialPort("COM8", this);
}

internal void Processor(string strFromSerial)
{
Console.WriteLine(strFromSerial);

}

internal void Init(string strFromSerial)
{
Console.WriteLine("Init " + strFromSerial); // On jette la première ligne
this.theSerPo.Process = null; // et on change de délégué ...
this.theSerPo.Process = this.Processor; // Mais ca marche pô, theSerPo est toujours null !!! Et je ne sais pas pourquoi
}
}

2 réponses

Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
8
Bonjour,
Je ne veux pas répondre au sujet du delegate.
Mais pourquoi tu jettes la première ligne ?
Est-ce juste après l'ouverture du port série?
Dans ce cas il y a une instruction pour le port série qui permet de vider les tampons de réception et d'émission ( discardInbuffer ou discardOutbuffer il me semble).
http://stackoverflow.com/questions/11571522/clear-serial-port-receive-buffer-in-c-sharp


louis
Bonjour,
La première ligne est incomplète, donc non analysable ! Et vider le buffer de réception ne garantit pas la validité de la suite, puisque cela se joue au niveau de l'octet!
JM