C# lire seul port Série lorsque des données
Je veux lire mon port série, mais seulement lorsque les données proviennent(je veux pas d'interrogation).
C'est comment je le fais.
Schnittstelle = new SerialPort("COM3");
Schnittstelle.BaudRate = 115200;
Schnittstelle.DataBits = 8;
Schnittstelle.StopBits = StopBits.Two;
....
Puis-je commencer un thread
beginn = new Thread(readCom);
beginn.Start();
et dans mon readCom, je suis en train de lire en continu (interrogation 🙁 )
private void readCom()
{
try
{
while (Schnittstelle.IsOpen)
{
Dispatcher.BeginInvoke(new Action(() =>
{
ComWindow.txtbCom.Text = ComWindow.txtbCom.Text + Environment.NewLine + Schnittstelle.ReadExisting();
ComWindow.txtbCom.ScrollToEnd();
}));
beginn.Join(10);
}
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Je veux yout lire lorsqu'une Interruption est à venir. Mais comment puis-je le faire ?
OriginalL'auteur user2261524 | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Vous devrez ajouter un gestionnaire d'événements pour l'DataReceived événement.
Ci-dessous est un exemple de msdn.microsoft.com avec quelques modifications: voir les commentaires!:
Chaque fois que des données, la DataReceivedHandler va déclencher et imprime vos données à la console. Je pense que vous devriez être en mesure de le faire dans votre code.
Je vais modifier ça! Merci!
merci pour cela. Qui a brisé beaucoup de thread exemples sur MSDN 🙂
Ils ont bien fait. Beaucoup de "allons tester mon code de thread". Peu d'un coup de TDD.
Debug.Imprimer n'est pas un remplacement pour Console.ReadKey(), mais pour imprimer sur console
OriginalL'auteur Eric Smekens
vous devez vous abonner à la DataReceived les cas, avant l'ouverture du port, puis de les écouter à cet événement lors du déclenchement.
Série, quand il y a des données dans la mémoire tampon, les données reçues de l'événement est déclenché, cela ne signifie pas que vous avez obtenu toutes vos données à la fois. Vous pourriez avoir à attendre pour le nombre de fois pour obtenir toutes vos données; c'est là que vous avez besoin pour traiter les données reçues séparément, peut-être les garder sur cache quelque part, avant de faire le traitement final.
new SerialDataReceivedEventHandler(SerialPortDataReceived);
mais la réponse ci-dessus? Fait-il une différence?Ma syntaxe est à partir de C# 2.0 et au-dessus. C'est exactement équivalente à la syntaxe C# 1.0 dans lequel l'encapsulation délégué doit explicitement être créé en utilisant le mot-clé new.
OriginalL'auteur Jegan