SerialPort.DataReceived Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt an, dass Daten über einen Port empfangen wurden, der durch das SerialPort-Objekt dargestellt wird.
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
Ereignistyp
Beispiele
In diesem Beispiel wird hinzugefügt SerialDataReceivedEventHandler DataReceived , um alle verfügbaren Daten zu lesen, die auf dem COM1-Port empfangen werden. Beachten Sie, dass dieser Code getestet werden muss, um Hardware an COM1 angefügt zu haben, die Daten sendet.
#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
Hinweise
Datenereignisse können durch alle Elemente in der SerialData Enumeration verursacht werden. Da das Betriebssystem bestimmt, ob dieses Ereignis ausgelöst werden soll oder nicht, werden möglicherweise nicht alle Paritätsfehler gemeldet.
Das DataReceived Ereignis wird auch ausgelöst, wenn ein Eof-Zeichen empfangen wird, unabhängig von der Anzahl von Bytes im internen Eingabepuffer und dem Wert der ReceivedBytesThreshold Eigenschaft.
PinChanged, DataReceived, und Ereignisse können aus der Reihenfolge aufgerufen werden, und es kann eine leichte Verzögerung zwischen dem zugrunde liegenden Stream meldet den Fehler und ErrorReceived wenn der Ereignishandler ausgeführt wird. Nur ein Ereignishandler kann gleichzeitig ausgeführt werden.
Das DataReceived Ereignis wird für jedes empfangene Byte nicht ausgelöst. Verwenden Sie die BytesToRead Eigenschaft, um zu bestimmen, wie viel Daten im Puffer gelesen werden sollen.
Das DataReceived Ereignis wird auf einem sekundären Thread ausgelöst, wenn Daten vom SerialPort Objekt empfangen werden. Da dieses Ereignis auf einem sekundären Thread ausgelöst wird und nicht der Hauptthread, versucht, einige Elemente im Hauptthread zu ändern, z. B. UI-Elemente, könnte eine Threading-Ausnahme auslösen. Wenn es notwendig ist, Elemente im Haupt Form - oder Control, Post-Änderungsanforderungen zurück zu ändern, die verwendet Invokewerden, was die Arbeit an dem richtigen Thread führt.
Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.