SerialPort.DataReceived Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í.