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 eine SerialDataReceivedEventHandler zu hinzugefügt, DataReceived um alle verfügbaren Daten zu lesen, die am COM1-Port empfangen werden. Beachten Sie, dass zum Testen dieses Codes Hardware an COM1 angefügt ist, 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 der Bytes im internen Eingabepuffer und dem Wert der ReceivedBytesThreshold Eigenschaft.
PinChangedEreignisse, DataReceived, und ErrorReceived können in einer fehlerhaften Reihenfolge aufgerufen werden, und es kann zu einer geringfügigen Verzögerung zwischen dem Fehler vom zugrunde liegenden Stream und der Ausführung des Ereignishandlers kommen. Es kann jeweils nur ein Ereignishandler ausgeführt werden.
Das DataReceived Ereignis wird nicht für jedes empfangene Byte ausgelöst. Verwenden Sie die BytesToRead -Eigenschaft, um zu bestimmen, wie viele Daten im Puffer noch gelesen werden müssen.
Das DataReceived Ereignis wird in einem sekundären Thread ausgelöst, wenn Daten vom SerialPort -Objekt empfangen werden. Da dieses Ereignis in einem sekundären Thread und nicht im Standard-Thread ausgelöst wird, kann der Versuch, einige Elemente im Standard Thread zu ändern, z. B. Benutzeroberflächenelemente, eine Threading-Ausnahme auslösen. Wenn Es erforderlich ist, Elemente im Standard Form oder Controlzu ändern, posten Sie Änderungsanforderungen mithilfe von Invokezurück, wodurch die Arbeit für den richtigen Thread ausgeführt wird.
Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.
Gilt für:
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Feedback senden und anzeigen für