SerialPort.DataReceived Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Indica que os dados foram recebidos através de uma porta representada pelo SerialPort objeto.
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
Tipo de Evento
Exemplos
Este exemplo adiciona um SerialDataReceivedEventHandler para DataReceived ler todos os dados disponíveis recebidos na porta COM1. Note que, para testar este código, é necessário ter hardware ligado ao COM1 que envie dados.
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
Observações
Os eventos de dados podem ser causados por qualquer um dos itens da SerialData enumeração. Como o sistema operativo determina se deve ou não ativar este evento, nem todos os erros de paridade podem ser reportados.
O DataReceived evento também é ativado se for recebido um carácter Eof, independentemente do número de bytes no buffer de entrada interno e do valor da ReceivedBytesThreshold propriedade.
PinChanged, DataReceived, e ErrorReceived eventos podem ser chamados fora de ordem, e pode haver um ligeiro atraso entre o momento em que o fluxo subjacente reporta o erro e a execução do handler de eventos. Apenas um gestor de eventos pode ser executado de cada vez.
Não é garantido que o DataReceived evento seja aumentado para cada byte recebido. Use a BytesToRead propriedade para determinar quanto dado resta para ler no buffer.
O DataReceived evento é gerado numa thread secundária quando os dados são recebidos do SerialPort objeto. Como este evento é gerado numa thread secundária, e não na thread principal, tentar modificar alguns elementos da thread principal, como elementos UI, pode gerar uma exceção de threading. Se for necessário modificar elementos no principal Form ou Control, publicar pedidos de alteração de volta usando Invoke, que fará o trabalho no thread correto.
Para obter mais informações sobre como manipular eventos, consulte Manipulando e gerando eventos.