SerialPort.DataReceived Händelse

Definition

Anger att data har tagits emot via en port som representeras av SerialPort objektet.

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 

Händelsetyp

Exempel

I det här exemplet läggs en SerialDataReceivedEventHandler till DataReceived för att läsa alla tillgängliga data som tas emot på COM1-porten. Observera att för att testa den här koden måste maskinvaran vara ansluten till COM1 som skickar data.

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

Kommentarer

Datahändelser kan orsakas av något av objekten SerialData i uppräkningen. Eftersom operativsystemet avgör om den här händelsen ska genereras eller inte, kan inte alla paritetsfel rapporteras.

Händelsen DataReceived utlöses också om ett Eof-tecken tas emot, oavsett antalet byte i den interna indatabufferten och värdet för ReceivedBytesThreshold egenskapen.

PinChanged, DataReceived, och ErrorReceived händelser kan anropas i fel ordning och det kan uppstå en liten fördröjning mellan när den underliggande strömmen rapporterar felet och när händelsehanteraren körs. Endast en händelsehanterare kan köras i taget.

Händelsen DataReceived är inte garanterad att aktiveras för varje byte som tas emot. Använd egenskapen BytesToRead för att avgöra hur mycket data som ska läsas i bufferten.

Händelsen DataReceived aktiveras på en sekundär tråd när data tas emot från objektet SerialPort . Eftersom den här händelsen genereras på en sekundär tråd, och inte huvudtråden, kan försök att ändra vissa element i huvudtråden, till exempel gränssnittselement, skapa ett trådfel. Om det är nödvändigt att ändra element i huvud Form - eller Control, skicka tillbaka ändringsbegäranden med hjälp av Invoke, vilket gör arbetet med rätt tråd.

Mer information om hur du hanterar händelser finns i Hantera och höja händelser.

Gäller för