0

J'ai une question, je construis une application de formulaire en C# mais je n'y suis pas très bon. Je veux ajouter une nouvelle fonctionnalité au formulaire qui écoute le port série en arrière-plan et qui affiche ensuite les données reçues dans une zone de texte et cela doit être fait tant que l'application est en cours d'exécution.Port d'écoute de port série en arrière-plan C#

J'ai trouvé du code sur la façon de faire cela pour une application de console mais maintenant je veux changer le code pour que je puisse l'utiliser sous une forme, quelqu'un pourrait-il m'aider?

using System; 
using System.IO.Ports; 

class PortDataReceived 
{ 
    public static void Main() 
    { 
     SerialPort mySerialPort = new SerialPort("COM8"); 

     mySerialPort.BaudRate = 57600; 
     mySerialPort.Parity = Parity.None; 
     mySerialPort.StopBits = StopBits.One; 
     mySerialPort.DataBits = 8; 
     mySerialPort.Handshake = Handshake.None; 

     mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); 

     mySerialPort.Open(); 

     Console.WriteLine("Press any key to continue..."); 
     Console.WriteLine(); 
     Console.ReadKey(); 
     mySerialPort.Close(); 
    } 

    private static void DataReceivedHandler(
         object sender, 
         SerialDataReceivedEventArgs e) 
    { 
     SerialPort sp = (SerialPort)sender; 
     string indata = sp.ReadExisting(); 
     Console.WriteLine("Data Received:"); 
     Console.Write(indata); 
    } 
} 

Répondre

0

Insérez le code série d'initialisation du port dans Shown gestionnaire d'événements du formulaire, copiez le code du gestionnaire d'événements DataReceived dans la classe forment un lieu d'écrire à la console, mettre les données dans une zone de texte ou si.

Veuillez noter que le gestionnaire DataReceived sera appelé sur un thread séparé, vous devez donc appeler this.Invoke pour exécuter le code qui met à jour votre interface utilisateur sur le thread UI. Sinon, vous obtiendrez une exception.

+0

Thx je vais essayer que: p – sanderfcb95

0

Vous pouvez utiliser le délégué de l'invocateur de méthode et définir le texte dans votre événement DataRecieved.

Exemple:

private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) 
{ 
    SerialPort sp = (SerialPort)sender; 
    string indata = sp.ReadExisting(); 

    this.Invoke((MethodInvoker)delegate 
    { 
     textBox.Text += indata; 
    }); 
}