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
イベントの種類
例
この例では、 を にDataReceived追加SerialDataReceivedEventHandlerして、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 イベントは順に呼び出される可能性があり、基になるストリームがエラーを報告してからイベント ハンドラーが実行されるまでに若干の遅延が発生する可能性があります。 一度に実行できるイベント ハンドラーは 1 つだけです。
イベントは DataReceived 、受信したすべてのバイトに対して発生するとは限りません。 プロパティを BytesToRead 使用して、バッファー内で読み取るデータの残りの量を確認します。
DataReceivedオブジェクトからデータを受信すると、セカンダリ スレッドでイベントがSerialPort発生します。 このイベントは、メイン スレッドではなくセカンダリ スレッドで発生するため、UI 要素など、メイン スレッド内の一部の要素を変更しようとすると、スレッド例外が発生する可能性があります。 メイン Form または Controlの要素を変更する必要がある場合は、 を使用してInvoke変更要求をポストバックします。これにより、適切なスレッドで処理が行われます。
イベントの処理の詳細については、「処理とイベントの発生」を参照してください。
適用対象
.NET