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которые будут выполняться в правильном потоке.
Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".