Freigeben über


SerialPort.DataReceived Ereignis

Definition

Gibt an, dass Daten über einen Port empfangen wurden, der durch das SerialPort Objekt dargestellt wird.

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 

Ereignistyp

Beispiele

In diesem Beispiel wird ein SerialDataReceivedEventHandler To-Objekt hinzugefügt, DataReceived um alle verfügbaren Daten zu lesen, die im COM1-Port empfangen wurden. Beachten Sie, dass zum Testen dieses Codes Hardware an COM1 angefügt werden muss, die Daten sendet.

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

Hinweise

Datenereignisse können durch alle Elemente in der SerialData Enumeration verursacht werden. Da das Betriebssystem bestimmt, ob dieses Ereignis ausgelöst werden soll, werden möglicherweise nicht alle Paritätsfehler gemeldet.

Das DataReceived Ereignis wird auch ausgelöst, wenn ein Eof-Zeichen empfangen wird, unabhängig von der Anzahl der Bytes im internen Eingabepuffer und dem Wert der ReceivedBytesThreshold Eigenschaft.

PinChanged, DataReceivedund ErrorReceived Ereignisse können nicht ordnungsgemäß aufgerufen werden, und es kann eine geringfügige Verzögerung zwischen dem Auftreten des zugrunde liegenden Datenstroms und der Ausführung des Ereignishandlers geben. Es kann jeweils nur ein Ereignishandler ausgeführt werden.

Das DataReceived Ereignis wird nicht garantiert für jedes empfangene Byte ausgelöst. Verwenden Sie die BytesToRead Eigenschaft, um zu bestimmen, wie viele Daten im Puffer gelesen werden müssen.

Das DataReceived Ereignis wird in einem sekundären Thread ausgelöst, wenn Daten vom SerialPort Objekt empfangen werden. Da dieses Ereignis in einem sekundären Thread und nicht im Hauptthread ausgelöst wird, kann der Versuch, einige Elemente im Hauptthread zu ändern, z. B. UI-Elemente, eine Threading-Ausnahme auslösen. Wenn es erforderlich ist, Elemente im Haupt Form - oder Control, post change requests back using Invokezu ändern, was die Arbeit an dem richtigen Thread bewirkt.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Gilt für: