SerialPort.DataReceived Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Indica que se recibieron datos a través de un puerto representado por el objeto 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
Tipo de evento
Ejemplos
En este ejemplo se agrega a SerialDataReceivedEventHandlerDataReceived para leer todos los datos disponibles recibidos en el puerto COM1. Tenga en cuenta que para probar este código es necesario tener el hardware asociado a COM1 que enviará datos.
#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
Comentarios
Los eventos de datos pueden deberse a cualquiera de los elementos de la SerialData enumeración. Dado que el sistema operativo determina si se debe generar este evento o no, no se pueden notificar todos los errores de paridad.
El DataReceived evento también se genera si se recibe un carácter Eof, independientemente del número de bytes en el búfer de entrada interno y el valor de la ReceivedBytesThreshold propiedad .
PinChangedLos eventos , DataReceivedy ErrorReceived se pueden llamar de forma desordenada y puede haber un ligero retraso entre cuando la secuencia subyacente notifica el error y cuando se ejecuta el controlador de eventos. Solo se puede ejecutar un controlador de eventos a la vez.
No DataReceived se garantiza que el evento se genere para cada byte recibido. Use la BytesToRead propiedad para determinar la cantidad de datos que se van a leer en el búfer.
El DataReceived evento se genera en un subproceso secundario cuando se reciben datos del SerialPort objeto . Dado que este evento se genera en un subproceso secundario y no en el subproceso principal, al intentar modificar algunos elementos del subproceso principal, como elementos de la interfaz de usuario, podría generar una excepción de subproceso. Si es necesario modificar los elementos de la base de datos principal Form o Control, vuelva a enviar solicitudes de cambio mediante Invoke, lo que realizará el trabajo en el subproceso adecuado.
Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.