SerialPort.DataReceived Événement

Définition

Indique que des données ont été reçues via un port représenté par l'objet SerialPort.Indicates that data has been received through a port represented by the SerialPort object.

public:
 event System::IO::Ports::SerialDataReceivedEventHandler ^ DataReceived;
public event System.IO.Ports.SerialDataReceivedEventHandler DataReceived;
member this.DataReceived : System.IO.Ports.SerialDataReceivedEventHandler 
Public Event DataReceived As SerialDataReceivedEventHandler 

Exemples

Cet exemple ajoute un SerialDataReceivedEventHandler à DataReceived pour lire toutes les données disponibles reçues sur le port COM1.This example adds a SerialDataReceivedEventHandler to DataReceived to read all the available data received on the COM1 port. Notez que pour tester ce code, il est nécessaire de disposer d’un matériel attaché à COM1 et qui enverra des données.Note that to test this code it is necessary to have hardware attached to COM1 that will send data.

#using <System.dll>

using namespace System;
using namespace System::IO::Ports;

ref class PortDataReceived
{
public:
    static void Main()
    {
        SerialPort^ mySerialPort = gcnew SerialPort("COM1");

        mySerialPort->BaudRate = 9600;
        mySerialPort->Parity = Parity::None;
        mySerialPort->StopBits = StopBits::One;
        mySerialPort->DataBits = 8;
        mySerialPort->Handshake = Handshake::None;
        mySerialPort->RtsEnable = true;

        mySerialPort->DataReceived += gcnew 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);
    }
};

int main()
{
    PortDataReceived::Main();
}
using System;
using System.IO.Ports;

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

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;

        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);
    }
}
Imports System.IO.Ports

Class PortDataReceived
    Public Shared Sub Main()
        Dim mySerialPort As New SerialPort("COM1")

        mySerialPort.BaudRate = 9600
        mySerialPort.Parity = Parity.None
        mySerialPort.StopBits = StopBits.One
        mySerialPort.DataBits = 8
        mySerialPort.Handshake = Handshake.None
        mySerialPort.RtsEnable = True

        AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler

        mySerialPort.Open()

        Console.WriteLine("Press any key to continue...")
        Console.WriteLine()
        Console.ReadKey()
        mySerialPort.Close()
    End Sub

    Private Shared Sub DataReceivedHandler(
                        sender As Object,
                        e As SerialDataReceivedEventArgs)
        Dim sp As SerialPort = CType(sender, SerialPort)
        Dim indata As String = sp.ReadExisting()
        Console.WriteLine("Data Received:")
        Console.Write(indata)
    End Sub
End Class

Remarques

Les événements de données peuvent être provoqués par l’un des éléments de l’énumération SerialData.Data events can be caused by any of the items in the SerialData enumeration. Étant donné que le système d’exploitation détermine s’il faut ou non déclencher cet événement, toutes les erreurs de parité peuvent ne pas être signalées.Because the operating system determines whether to raise this event or not, not all parity errors may be reported.

L’événement DataReceived est également déclenché si un caractère EOF est reçu, quel que soit le nombre d’octets dans la mémoire tampon d’entrée interne et la valeur de la propriété ReceivedBytesThreshold.The DataReceived event is also raised if an Eof character is received, regardless of the number of bytes in the internal input buffer and the value of the ReceivedBytesThreshold property.

les événements PinChanged, DataReceivedet ErrorReceived peuvent être appelés dans le désordre, et il peut y avoir un léger délai entre le moment où le flux sous-jacent signale l’erreur et le moment où le gestionnaire d’événements est exécuté.PinChanged, DataReceived, and ErrorReceived events may be called out of order, and there may be a slight delay between when the underlying stream reports the error and when the event handler is executed. Un seul gestionnaire d’événements peut s’exécuter à la fois.Only one event handler can execute at a time.

Il n’est pas garanti que l’événement DataReceived soit déclenché pour chaque octet reçu.The DataReceived event is not guaranteed to be raised for every byte received. Utilisez la propriété BytesToRead pour déterminer la quantité de données restant à lire dans la mémoire tampon.Use the BytesToRead property to determine how much data is left to be read in the buffer.

L’événement DataReceived est déclenché sur un thread secondaire lorsque des données sont reçues de l’objet SerialPort.The DataReceived event is raised on a secondary thread when data is received from the SerialPort object. Étant donné que cet événement est déclenché sur un thread secondaire, et non sur le thread principal, toute tentative de modification de certains éléments du thread principal, tels que les éléments d’interface utilisateur, peut déclencher une exception de thread.Because this event is raised on a secondary thread, and not the main thread, attempting to modify some elements in the main thread, such as UI elements, could raise a threading exception. S’il est nécessaire de modifier les éléments du Form principal ou Control, republiez les demandes de modification à l’aide d' Invoke, ce qui fera le travail sur le thread approprié.If it is necessary to modify elements in the main Form or Control, post change requests back using Invoke, which will do the work on the proper thread.

Pour plus d'informations sur la gestion des événements, voir gestion et déclenchement d’événements.For more information about handling events, see Handling and Raising Events.

S’applique à