Je suis très nouveau sur C# et je crée une classe de port série pour un tableau que j'ai conçu. Dans lequel cette classe contient des méthodes pour ouvrir/fermer un port série connecté à la carte. Il devrait également lire les messages de la carte et écrire des messages de l'interface utilisateur sur la carte (j'utilise une application de formulaires pour entrer et afficher des valeurs).L'indexeur créé pour voir le tableau ne voit pas les modifications apportées au tableau
J'ai lu le tampon d'entrée interne et placez les octets dans mon propre tampon logiciel, lorsqu'un message est terminé, cela invite le formulaire pour analyser le message ...
Pour cela, je l'ai créé un indexeur pointez sur le tableau (à partir du formulaire) et prenez les octets qu'il désire.
uint[] serialPortReceiveBuffer = new uint[3];
public delegate void Del();
Del promptFormAction = Form1.MsgReceived;
public void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
for (int i = 0; i <= 2; i++)
{
serialPortReceiveBuffer[i] = (uint)serialPort1.ReadByte();
}
promptFormAction();
}
public uint this[uint i]
{
get { return serialPortReceiveBuffer[i]; }
}
c'est le code dans ma classe pcbSerialPort, et le code lié à dans la classe Form1 est la suivante:
public static void MsgReceived()
{
Form1 _frm = new Form1();
_frm.analyzeIncomingMessage();
}
public void analyzeIncomingMessage()
{
if (PCB[0] == 63)
{
setBoardDesignator(PCB[1], PCB[2]);
}
}
Mon problème est que le lorsque j'utilise l'indexeur pour accéder au serialPortReceiveBuffer
, il ne voit pas les modifications que je lui ai apportées en plaçant les octets reçus dans le même tableau. Par exemple, lorsque je reçois une chaîne de mon propre protocole -> "? 10" le tampon est rempli avec [63] [49] [48]
Bien que lorsque j'essaie d'accéder à ce tampon en utilisant l'indexeur, je reçois [0] [0] [0]
S'il vous plaît quelqu'un peut-il vous aider? En outre, je suis conscient qu'il y a probablement quelques autres choses que j'aurais pu faire mieux, donc si vous avez des conseils généraux, ce serait génial. Aussi dans une langue que je peux comprendre. Je suis juste en train de me concentrer sur de nombreux aspects de C#, j'ai fait des logiciels embarqués l'année dernière mais je ne me considérerais pas comme un programmeur compétent.
Merci
Où est 'PCB' défini? Êtes-vous sûr de regarder la même instance? Êtes-vous sûr que l'événement 'DataRecieved' est même déclenché? IIRC, il y a un seuil (nombre d'octets) qui doit être atteint avant que cet événement se déclenche. –
Salut merci de répondre, oui l'événement DataReceived est certainement déclenché en mode débogage je peux voir que mon PCB a envoyé avec succès le message "? 10" et que les valeurs correctes ont été stockées dans le tableau. Je mets un marqueur sur le côté de promptFormAction(); donc je verrais le tableau dans sa forme complète. Ensuite, placez un marqueur dans l'indexeur et appuyez sur play pour voir que le tableau était vide. –
PCB est défini dans la classe Form1 en haut comme ceci: pcbSerialPort PCB = new pcbSerialPort(); –