SerialPort.DataReceived Kejadian
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menunjukkan bahwa data telah diterima melalui port yang diwakili oleh SerialPort objek .
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
Jenis Acara
Contoh
Contoh ini menambahkan SerialDataReceivedEventHandler ke untuk DataReceived membaca semua data yang tersedia yang diterima pada port COM1. Perhatikan bahwa untuk menguji kode ini perlu memiliki perangkat keras yang terpasang pada COM1 yang akan mengirim data.
#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
Keterangan
Peristiwa data dapat disebabkan oleh salah satu item dalam SerialData enumerasi. Karena sistem operasi menentukan apakah akan menaikkan peristiwa ini atau tidak, tidak semua kesalahan paritas dapat dilaporkan.
Peristiwa DataReceived ini juga dimunculkan jika karakter Eof diterima, terlepas dari jumlah byte dalam buffer input internal dan nilai ReceivedBytesThreshold properti .
PinChanged, DataReceived, dan ErrorReceived peristiwa mungkin dipanggil secara tidak berurutan, dan mungkin ada sedikit penundaan antara ketika aliran yang mendasar melaporkan kesalahan dan ketika penanganan aktivitas dijalankan. Hanya satu penanganan aktivitas yang dapat dijalankan pada satu waktu.
Peristiwa DataReceived ini tidak dijamin akan dinaikkan untuk setiap byte yang diterima. BytesToRead Gunakan properti untuk menentukan berapa banyak data yang tersisa untuk dibaca di buffer.
Peristiwa DataReceived dinaikkan pada utas sekunder saat data diterima dari SerialPort objek . Karena peristiwa ini dinaikkan pada utas sekunder, dan bukan utas utama, mencoba memodifikasi beberapa elemen di utas utama, seperti elemen UI, dapat meningkatkan pengecualian utas. Jika perlu untuk memodifikasi elemen di utama Form atau Control, posting permintaan perubahan kembali menggunakan Invoke, yang akan melakukan pekerjaan pada utas yang tepat.
Untuk informasi selengkapnya tentang menangani peristiwa, lihat Menangani dan Menaikkan Peristiwa.