Considérons que j'ai un écouteur d'événement en C# qui attend les données du port série, qui sont renvoyées une fois capturées en définissant un statut. Dans la boucle principale, je regarde dans ce statut et sur cette base, je décide quoi faire ensuite. Pour ce faire, j'écris d'abord la commande dans le port série et j'attends la sortie en utilisant la méthode Thread.Sleep. Au moment où le thread principal est toujours en mode veille, l'écouteur d'événement enverra déjà les données et rien n'est fait pour gérer ce scénario.Gestion des données envoyées par les gestionnaires d'événements en mode veille du thread principal C#
Quelqu'un peut-il s'il vous plaît me dire quel serait le résultat dans cette condition et comment l'éviter?
Le code serait comme
bool status = false;
//main thread
private void Main()
{
//some Code
serialPort.Write("something");
//Wait for 10 sec
Thread.Sleep(10000);
while(status == false)
{
// do something else
}
}
//Ignore the syntax, this is just to make people understand
public void OndataReceived(object sender, EventArg arg)
{
//Function that recieve the data
Receive();
//change status to true
status = true;
return;
}
Jetez un oeil à Manuel- et AutoResetEvent – Dawnkeeper
créer votre événement personnalisé, le feu de l'intérieur de la méthode 'OndataReceived' et faire les prochaines étapes de la méthode à mon avis –