Salut à tous,

Je démarre l'apprentissage de C# , et j'aimerais réaliser un "chat" par port série.
Lorsque j'écris vers le port distant, pas de problèmes les données sont envoyées et s'affiche sur un terminal.
Dans l'autre sens, j'aimerai recevoir des données(terminal vers mon appli) grâce l'évènement DataReiceved de l'objet SerialPort mais la aucun évènement se lève.

Les exemples d'utilisation Serialport que 'jai trouvé n'utilise pas les évènements donc si quelqu'un à une idée et peu me filer un coup de main , je lui en serai très reconnaissant !

Cdt


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
namespace WindowsApplication1
{
    public partial class TestSerialCom : Form
    {
        private string strPortCom = "COM5";
        //private string strNameSys = "Application1";
        private string strMess = "PING";
        private string strUserName = "Yo";
        private string strUserDistant = "User Test";
 
 
        public TestSerialCom()
        {
            //init des composant graphiques
            InitializeComponent();
            //Abonnement à l'événement DataReceived de l'obj DataReceived => réalisé dans TestSerialCom.Designer.cs
            //this.serialPort1.DataReceived +=new SerialDataReceivedEventHandler(serialPort1_DataReceived)
 
            // Obtenir la liste des noms de Port
            string[] ports = SerialPort.GetPortNames();
            Console.WriteLine(" Les ports suivants ont été trouvés: ");
            rtbEchange.AppendText(" Les ports suivants ont été trouvés: \n\n");
            // Affiche la liste des ports dispo
            foreach (string port in ports)
            {
                Console.WriteLine(port);
                rtbEchange.AppendText(String.Format("port = {0} \n", port));
                cboxListPort.Items.Add(port);
            }
        }
 
        private void btnEnvoi_click(object sender, EventArgs e)
        {
            if (tbEnvoi.Text != "" && serialPort1.IsOpen)
            {
                serialPort1.WriteLine(String.Format("[{0}] >> [{1}] :{2}", strUserName, strUserDistant, tbEnvoi.Text));
                rtbEchange.AppendText(String.Format("[{0}] >> [{1}] :{2} \n", strUserName, strUserDistant, tbEnvoi.Text));
            }
            if (serialPort1.IsOpen == false )
            {
                textBox1.Text = "Port " + strPortCom + " fermé";
            }
            textBox1.Text = "";
        }
 
 
        #region Evenements
 
        private void TestSerialCom_Load(object sender, EventArgs e)
        {
            serialPort1.ReadBufferSize = 2;
            serialPort1.ReceivedBytesThreshold = 2;
            serialPort1.Handshake = Handshake.None;
            serialPort1.ReadTimeout = 500;
            serialPort1.WriteTimeout = 500;
 
            ///serialPort1.BreakState = true;
            // instance du SerialPort
            serialPort1 = new SerialPort(strPortCom, 9600, Parity.None, 8, StopBits.One);
            // ouverture du port COM1
            serialPort1.Open();
            // envoi d'une trame PING
            serialPort1.WriteLine(String.Format("Nouvelle session <{0}>:  {1}", strUserName, strMess));
 
 
            textBox1.Text = strPortCom;
        }
 
        private void TestSerialCom_FormClosing(object sender, FormClosingEventArgs e)
        {
            serialPort1.Close();
        }
 
 
        //Gestion événementielle de la réception des données sur le port serie
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            Console.WriteLine(String.Format("Value={0}",e.EventType.ToString()));
            rtbEchange.AppendText(String.Format("[{0}]<<[{1}] :{2} \n",strUserName ,strUserDistant , serialPort1.ReadLine()));
        }
 
 
        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            this.Close();
            this.Dispose();
        }
 
        private void cboxListPort_SelectedIndexChanged(object sender, EventArgs e)
        {
            strPortCom = cboxListPort.SelectedItem.ToString();
        }
 
        #endregion
    } 
}