SerialPort.DataReceived Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Anger att data har tagits emot via en port som representeras av SerialPort objektet.
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
Händelsetyp
Exempel
I det här exemplet läggs en SerialDataReceivedEventHandler till DataReceived för att läsa alla tillgängliga data som tas emot på COM1-porten. Observera att för att testa den här koden måste maskinvaran vara ansluten till COM1 som skickar data.
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
Kommentarer
Datahändelser kan orsakas av något av objekten SerialData i uppräkningen. Eftersom operativsystemet avgör om den här händelsen ska genereras eller inte, kan inte alla paritetsfel rapporteras.
Händelsen DataReceived utlöses också om ett Eof-tecken tas emot, oavsett antalet byte i den interna indatabufferten och värdet för ReceivedBytesThreshold egenskapen.
PinChanged, DataReceived, och ErrorReceived händelser kan anropas i fel ordning och det kan uppstå en liten fördröjning mellan när den underliggande strömmen rapporterar felet och när händelsehanteraren körs. Endast en händelsehanterare kan köras i taget.
Händelsen DataReceived är inte garanterad att aktiveras för varje byte som tas emot. Använd egenskapen BytesToRead för att avgöra hur mycket data som ska läsas i bufferten.
Händelsen DataReceived aktiveras på en sekundär tråd när data tas emot från objektet SerialPort . Eftersom den här händelsen genereras på en sekundär tråd, och inte huvudtråden, kan försök att ändra vissa element i huvudtråden, till exempel gränssnittselement, skapa ett trådfel. Om det är nödvändigt att ändra element i huvud Form - eller Control, skicka tillbaka ändringsbegäranden med hjälp av Invoke, vilket gör arbetet med rätt tråd.
Mer information om hur du hanterar händelser finns i Hantera och höja händelser.