Jazyk

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 k DataReceived přečtení všech dostupných dat přijatých na portu COM1. Nezapomeňte, že k otestování tohoto kódu je nutné připojit hardware připojený k modelu COM1, který bude odesílat 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

Poznámky

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

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

PinChanged, DataReceiveda ErrorReceived události 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 kdy se obslužná rutina události spustí. Najednou může být spuštěna pouze jedna obslužná rutina události.

Událost DataReceived není zaručena, že bude vyvolána pro každý přijatý bajt. BytesToRead Pomocí vlastnosti určete, kolik dat zbývá číst 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 ne 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 vlákna. Pokud je nutné upravit prvky v hlavní Form nebo Control, post change requests back using Invoke, což provede práci na správném vlákně.

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

Platí pro