SerialPort.DataReceived Gebeurtenis

Definitie

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.

Van toepassing op