SerialPort.DataReceived Événement
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.