SerialPort.DataReceived Событие

Определение

Указывает, что данные были получены через порт, 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 

Тип события

Примеры

В этом примере добавляется SerialDataReceivedEventHandler для DataReceived чтения всех доступных данных, полученных на порту COM1. Обратите внимание, что для тестирования этого кода необходимо подключить оборудование к COM1, которое будет отправлять данные.

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

Комментарии

События данных могут быть вызваны любым из элементов перечисления SerialData . Так как операционная система определяет, следует ли вызывать это событие или нет, могут быть сообщены не все ошибки четности.

Событие DataReceived также возникает при получении символа Eof, независимо от количества байтов во внутреннем входном буфере и значении ReceivedBytesThreshold свойства.

PinChanged, DataReceivedи ErrorReceived события могут быть вызваны из порядка, и может быть небольшая задержка между тем, когда базовый поток сообщает об ошибке и когда обработчик событий выполняется. Одновременно может выполняться только один обработчик событий.

Событие DataReceived не гарантируется для каждого полученного байта. BytesToRead Используйте свойство, чтобы определить, сколько данных осталось считывать в буфере.

Событие DataReceived возникает в дополнительном потоке при получении данных от SerialPort объекта. Так как это событие возникает на вторичном потоке, а не в основном потоке, пытаясь изменить некоторые элементы в основном потоке, например элементы пользовательского интерфейса, может вызвать исключение потоков. Если необходимо изменить элементы в основном Form или Controlпосле изменения запросов на изменение, Invokeкоторые будут выполняться в правильном потоке.

Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".

Применяется к