Compartir vía


SerialPort.DataReceived Evento

Definición

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.

Se aplica a