Bagikan melalui


SerialPort.DataReceived Kejadian

Definisi

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.

Berlaku untuk