Bonsoir, désolé d'avance d'écrire autant mais je ne sais pas où est l'erreur...
Mon application cliente reçoit des données du serveur de manière asynchrone. Je souhaite transférer un grand nombre de données en une seule fois (le contenu d'un tableau, quelques centaines d'octets).
Je veux que le serveur puisse envoyer des "commandes" et qu'une fonction du côté client agisse en fonction de ces commandes, par exemple si le message du serveur est le suivant "print_hello"
il devrait appeler une fonction qui imprime hello.
Si j'ai bien compris, lorsque je reçois des données de manière asynchrone, je ne peux pas savoir quelle quantité de données a été envoyée (ou si plus de données que prévu ont été envoyées), je dois donc stocker toutes les données dans une mémoire tampon, et lorsqu'une "fin de commande" (par exemple, "end of command") est envoyée, je dois la stocker dans un tampon, '!'
) a été reçu, il doit savoir qu'il doit appeler la fonction.
Jusqu'à présent, cela me semble logique, mais j'ai du mal à le mettre en œuvre. Dans ma fonction de rappel DataReceived, j'ai ce code :
Console.WriteLine("Raw data: {0}", data));
mainBuffer += data;
Console.WriteLine(mainBuffer);
mainBuffer est déclaré comme volatile static string mainBuffer = "";
La première ligne s'imprime correctement et parcourt toutes les données comme prévu. Cependant, lorsque j'imprime la ligne mainBuffer
Il n'imprime que le tout premier ensemble de données que j'ai reçu, le reste n'est pas ajouté à la mémoire tampon.
Quelle en est la cause ? Des problèmes de sécurité du fil ? Est-ce que je ne lis pas la dernière valeur de mainBuffer ? Je ne peux pas utiliser de points d'arrêt pour déboguer ce problème.
Exemple de sortie :
Raw data: ABC
ABC
Raw data: DEF
ABC
RAW data: GHI
ABC
Petite mise à jour, j'ai essayé d'utiliser un volatile static int
et il s'incrémente et s'imprime correctement après chaque DataReceived()
. Cependant, la chaîne n'est toujours pas mise à jour.