SerialPort.DataReceived Gebeurtenis
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Geeft aan dat gegevens zijn ontvangen via een poort die wordt vertegenwoordigd door het SerialPort object.
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
Gebeurtenistype
Voorbeelden
In dit voorbeeld wordt een SerialDataReceivedEventHandler toegevoegd aan het DataReceived lezen van alle beschikbare gegevens die zijn ontvangen op de COM1-poort. Houd er rekening mee dat als u deze code wilt testen, de hardware moet zijn gekoppeld aan COM1 waarmee gegevens worden verzonden.
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
Opmerkingen
Gegevens gebeurtenissen kunnen worden veroorzaakt door een van de items in de SerialData opsomming. Omdat het besturingssysteem bepaalt of deze gebeurtenis moet worden gegenereerd of niet, kunnen niet alle pariteitsfouten worden gerapporteerd.
De DataReceived gebeurtenis wordt ook gegenereerd als een Eof-teken wordt ontvangen, ongeacht het aantal bytes in de interne invoerbuffer en de waarde van de ReceivedBytesThreshold eigenschap.
PinChanged, DataReceiveden ErrorReceived gebeurtenissen kunnen op volgorde worden aangeroepen en er kan een kleine vertraging optreden tussen wanneer de onderliggende stream de fout rapporteert en wanneer de gebeurtenis-handler wordt uitgevoerd. Slechts één gebeurtenishandler kan tegelijk worden uitgevoerd.
De DataReceived gebeurtenis wordt niet gegarandeerd gegenereerd voor elke ontvangen byte. Gebruik de BytesToRead eigenschap om te bepalen hoeveel gegevens er nog moeten worden gelezen in de buffer.
De DataReceived gebeurtenis wordt gegenereerd op een secundaire thread wanneer gegevens van het SerialPort object worden ontvangen. Omdat deze gebeurtenis wordt gegenereerd op een secundaire thread en niet op de hoofdthread, kan een threading-uitzondering ontstaan wanneer u probeert bepaalde elementen in de hoofdthread, zoals UI-elementen, te wijzigen. Als het nodig is om elementen in de hoofd Form - of Control, post wijzigingsaanvragen terug met behulp van Invoke, die het werk op de juiste thread zal uitvoeren.
Zie Gebeurtenissen verwerken en genereren voor meer informatie over het afhandelen van gebeurtenissen.