Partager via


SerialPort.DataReceived Événement

Définition

Indique que des données ont été reçues via un port représenté par l'objet SerialPort.

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

Type d'événement

Exemples

Cet exemple ajoute un SerialDataReceivedEventHandler à DataReceived pour lire toutes les données disponibles reçues sur le port COM1. Notez que pour tester ce code, il est nécessaire d’avoir du matériel attaché à COM1 qui envoie des données.

#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 dus à l’un des éléments de l’énumération SerialData . Étant donné que le système d’exploitation détermine s’il faut déclencher cet événement ou non, toutes les erreurs de parité peuvent ne pas être signalées.

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 ReceivedBytesThreshold propriété .

PinChangedLes événements , 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é. Un seul gestionnaire d’événements peut s’exécuter à la fois.

Il DataReceived n’est pas garanti que l’événement soit déclenché pour chaque octet reçu. Utilisez la BytesToRead propriété pour déterminer la quantité de données restant à lire dans la mémoire tampon.

L’événement DataReceived est déclenché sur un thread secondaire lorsque des données sont reçues de l’objet SerialPort . Étant donné que cet événement est déclenché sur un thread secondaire, et non sur le thread main, une tentative de modification de certains éléments dans le thread main, tels que des éléments d’interface utilisateur, peut déclencher une exception de threading. S’il est nécessaire de modifier des éléments dans le main Form ou Control, post-demandes de modification à l’aide Invokede , qui effectuera le travail sur le thread approprié.

Pour plus d'informations sur la gestion des événements, voir gestion et déclenchement d’événements.

S’applique à