Sdílet prostřednictvím


SerialPort.DataReceived Událost

Definice

Označuje, že data byla přijata přes port reprezentovaný objektem 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 

Event Type

Příklady

Tento příklad přidá SerialDataReceivedEventHandler do DataReceived ke čtení všechna dostupná data přijatá na portu COM1. Upozorňujeme, že pro testování tohoto kódu je nutné mít k modelu COM1 připojený hardware, který bude odesílat data.

#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

Poznámky

Události dat mohou být způsobeny libovolnou položkou ve výčtu SerialData . Vzhledem k tomu, že operační systém určuje, jestli se má tato událost vyvolat, nebo ne, ne všechny chyby parity mohou být hlášeny.

Událost DataReceived je vyvolána také při přijetí znaku Eof, bez ohledu na počet bajtů v interní vstupní vyrovnávací paměti a hodnotu ReceivedBytesThreshold vlastnosti.

PinChangedUdálosti , DataReceiveda ErrorReceived mohou být volána mimo pořadí a může dojít k mírnému zpoždění mezi tím, kdy podkladový datový proud hlásí chybu, a spuštěním obslužné rutiny události. Najednou může být spuštěna pouze jedna obslužná rutina události.

Není DataReceived zaručeno vyvolání události pro každý přijatý bajt. BytesToRead Pomocí vlastnosti určete, kolik dat zbývá ke čtení ve vyrovnávací paměti.

Událost DataReceived je vyvolána v sekundárním vlákně při přijetí dat z objektu SerialPort . Vzhledem k tomu, že tato událost je vyvolána v sekundárním vlákně, a nikoli v hlavním vlákně, může pokus o úpravu některých prvků v hlavním vlákně, jako jsou prvky uživatelského rozhraní, vyvolat výjimku z vlákna. Pokud je nutné upravit prvky v hlavní Form nebo Control, odešlete žádosti o změnu zpět pomocí Invoke, který provede práci na správném vlákně.

Další informace o zpracování událostí najdete v tématu Zpracování a vyvolávání událostí.

Platí pro