SerialPort.DataReceived Olay

Tanım

Verilerin nesnesi tarafından SerialPort temsil edilen bir bağlantı noktası aracılığıyla alındığını gösterir.

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 

Olay Türü

Örnekler

Bu örnek, COM1 bağlantı noktasında alınan tüm kullanılabilir verileri okumak için öğesine SerialDataReceivedEventHandlerDataReceived ekler. Bu kodu test etmek için, verileri gönderecek COM1'e bağlı donanım olması gerekir.

#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

Açıklamalar

Veri olayları, numaralandırmadaki SerialData öğelerden herhangi birinden kaynaklanabilir. İşletim sistemi bu olayın tetiklenip tetiklenmeyeceğini belirlediğinden, tüm eşlik hataları bildirilmeyebilir.

İç DataReceived giriş arabelleğindeki bayt sayısından ve özelliğin değerinden ReceivedBytesThreshold bağımsız olarak bir Eof karakteri alınırsa da olay tetikler.

PinChanged, DataReceivedve ErrorReceived olayları sıra dışı olarak çağrılabilir ve temel alınan akışın hatayı bildirmesi ile olay işleyicisinin yürütülmesi arasında küçük bir gecikme olabilir. Aynı anda yalnızca bir olay işleyicisi yürütülebilir.

Olayın DataReceived alınan her bayt için tetiklenme garantisi yok. Arabellekte BytesToRead okunacak veri miktarını belirlemek için özelliğini kullanın.

Nesneden DataReceived veri alındığında olay ikincil bir iş parçacığında SerialPort oluşturulur. Bu olay ana iş parçacığında değil ikincil bir iş parçacığında tetiklendiğinden, ana iş parçacığındaki ui öğeleri gibi bazı öğeleri değiştirmeye çalışmak bir iş parçacığı özel durumu oluşturabilir. ana Form veya Controliçindeki öğeleri değiştirmek gerekiyorsa, değişiklik isteklerini kullanarak Invokegeri gönderin. Bu işlem, işi uygun iş parçacığında yapar.

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır