SerialPort.DataReceived 이벤트
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
SerialPort 개체가 나타내는 포트를 통해 데이터를 수신했음을 나타냅니다.
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
이벤트 유형
예제
다음은 에 를 SerialDataReceivedEventHandlerDataReceived 추가하여 COM1 포트에서 받은 사용 가능한 모든 데이터를 읽는 예제입니다. 이 코드를 테스트하려면 데이터를 보낼 COM1에 연결된 하드웨어가 있어야 합니다.
#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
설명
데이터 이벤트는 열거형의 모든 항목에 SerialData 의해 발생할 수 있습니다. 운영 체제에서 이 이벤트를 발생할지 여부를 결정하기 때문에 모든 패리티 오류가 보고될 수 있는 것은 아닙니다.
DataReceived 내부 입력 버퍼의 바이트 수와 속성 값 ReceivedBytesThreshold 에 관계없이 Eof 문자를 받은 경우에도 이벤트가 발생합니다.
PinChanged, DataReceived및 ErrorReceived 이벤트는 순서대로 호출될 수 있으며 기본 스트림이 오류를 보고하는 시기와 이벤트 처리기가 실행되는 시점 사이에 약간의 지연이 있을 수 있습니다. 한 번에 하나의 이벤트 처리기만 실행할 수 있습니다.
DataReceived 이벤트가 수신된 모든 바이트에 대해 발생하도록 보장되지는 않습니다. 사용 된 버퍼에서 BytesToRead 읽을 남아 있는 데이터의 양을 결정 하는 속성입니다.
이벤트는 DataReceived 개체에서 데이터를 받을 때 보조 스레드에서 SerialPort 발생합니다. 이 이벤트는 기본 스레드가 아닌 보조 스레드에서 발생하므로 UI 요소와 같은 기본 스레드의 일부 요소를 수정하려고 하면 스레딩 예외가 발생할 수 있습니다. 기본 Form 또는 Control의 요소를 수정해야 하는 경우 를 사용하여 Invoke변경 요청을 다시 게시하여 적절한 스레드에서 작업을 수행합니다.
이벤트 처리에 대한 자세한 내용은 이벤트 처리 및 발생 을 참조하십시오.
적용 대상
.NET