英語で読む

次の方法で共有


SerialPort クラス

定義

シリアル ポート リソースを表します。

C#
public class SerialPort : System.ComponentModel.Component
継承

次のコード例では、 クラスを SerialPort 使用して、2 人のユーザーが null モデム ケーブルで接続されている 2 つの個別のコンピューターからチャットできるようにします。 この例では、チャットの前に、ユーザーにポート設定とユーザー名の入力を求められます。 この例の完全な機能を実現するには、両方のコンピューターがプログラムを実行している必要があります。

C#
// Use this code inside a project created with the Visual C# > Windows Desktop > Console Application template.
// Replace the code in Program.cs with this code.

using System;
using System.IO.Ports;
using System.Threading;

public class PortChat
{
    static bool _continue;
    static SerialPort _serialPort;

    public static void Main()
    {
        string name;
        string message;
        StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        Thread readThread = new Thread(Read);

        // Create a new SerialPort object with default settings.
        _serialPort = new SerialPort();

        // Allow the user to set the appropriate properties.
        _serialPort.PortName = SetPortName(_serialPort.PortName);
        _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
        _serialPort.Parity = SetPortParity(_serialPort.Parity);
        _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
        _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
        _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

        // Set the read/write timeouts
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;

        _serialPort.Open();
        _continue = true;
        readThread.Start();

        Console.Write("Name: ");
        name = Console.ReadLine();

        Console.WriteLine("Type QUIT to exit");

        while (_continue)
        {
            message = Console.ReadLine();

            if (stringComparer.Equals("quit", message))
            {
                _continue = false;
            }
            else
            {
                _serialPort.WriteLine(
                    String.Format("<{0}>: {1}", name, message));
            }
        }

        readThread.Join();
        _serialPort.Close();
    }

    public static void Read()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort.ReadLine();
                Console.WriteLine(message);
            }
            catch (TimeoutException) { }
        }
    }

    // Display Port values and prompt user to enter a port.
    public static string SetPortName(string defaultPortName)
    {
        string portName;

        Console.WriteLine("Available Ports:");
        foreach (string s in SerialPort.GetPortNames())
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
        portName = Console.ReadLine();

        if (portName == "" || !(portName.ToLower()).StartsWith("com"))
        {
            portName = defaultPortName;
        }
        return portName;
    }
    // Display BaudRate values and prompt user to enter a value.
    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
        string baudRate;

        Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
        baudRate = Console.ReadLine();

        if (baudRate == "")
        {
            baudRate = defaultPortBaudRate.ToString();
        }

        return int.Parse(baudRate);
    }

    // Display PortParity values and prompt user to enter a value.
    public static Parity SetPortParity(Parity defaultPortParity)
    {
        string parity;

        Console.WriteLine("Available Parity options:");
        foreach (string s in Enum.GetNames(typeof(Parity)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), true);
        parity = Console.ReadLine();

        if (parity == "")
        {
            parity = defaultPortParity.ToString();
        }

        return (Parity)Enum.Parse(typeof(Parity), parity, true);
    }
    // Display DataBits values and prompt user to enter a value.
    public static int SetPortDataBits(int defaultPortDataBits)
    {
        string dataBits;

        Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
        dataBits = Console.ReadLine();

        if (dataBits == "")
        {
            dataBits = defaultPortDataBits.ToString();
        }

        return int.Parse(dataBits.ToUpperInvariant());
    }

    // Display StopBits values and prompt user to enter a value.
    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
        string stopBits;

        Console.WriteLine("Available StopBits options:");
        foreach (string s in Enum.GetNames(typeof(StopBits)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter StopBits value (None is not supported and \n" +
         "raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
        stopBits = Console.ReadLine();

        if (stopBits == "" )
        {
            stopBits = defaultPortStopBits.ToString();
        }

        return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
    }
    public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
    {
        string handshake;

        Console.WriteLine("Available Handshake options:");
        foreach (string s in Enum.GetNames(typeof(Handshake)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter Handshake value (Default: {0}):", defaultPortHandshake.ToString());
        handshake = Console.ReadLine();

        if (handshake == "")
        {
            handshake = defaultPortHandshake.ToString();
        }

        return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
    }
}

注釈

シリアル ポート ファイル リソースを制御するには、このクラスを使用します。 このクラスは、同期およびイベントドリブン I/O、ピンとブレークの状態へのアクセス、シリアル ドライバーのプロパティへのアクセスを提供します。 さらに、このクラスの機能を内部 Stream オブジェクトでラップし、 プロパティを介して BaseStream アクセスし、ストリームをラップまたは使用するクラスに渡すことができます。

クラスはSerialPort、、ASCIIEncodingUTF8EncodingUnicodeEncodingUTF32Encoding、および コード ページが 50000 未満またはコード ページが 54936 である mscorlib.dll で定義されているエンコーディングをサポートします。 代替エンコードを使用できますが、 メソッドまたは Write メソッドをReadByte使用し、エンコードを自分で実行する必要があります。

メソッドを GetPortNames 使用して、現在のコンピューターの有効なポートを取得します。

読み取り SerialPort 操作中にオブジェクトがブロックされた場合は、スレッドを中止しないでください。 代わりに、ベース ストリームを閉じるか、 オブジェクトを SerialPort 破棄します。

コンストラクター

SerialPort()

SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(IContainer)

指定した IContainer オブジェクトを使用して、SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(String)

指定したポート名を使用して、SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(String, Int32)

指定したポート名とボー レートを使用して、SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(String, Int32, Parity)

指定したポート名、ボー レート、およびパリティ ビットを使用して、SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(String, Int32, Parity, Int32)

指定したポート名、ボー レート、パリティ ビット、およびデータ ビットを使用して、SerialPort クラスの新しいインスタンスを初期化します。

SerialPort(String, Int32, Parity, Int32, StopBits)

指定したポート名、ボー レート、パリティ ビット、データ ビット、およびストップ ビットを使用して、SerialPort クラスの新しいインスタンスを初期化します。

フィールド

InfiniteTimeout

タイムアウトが発生しないことを示します。

プロパティ

BaseStream

SerialPort オブジェクトの基になる Stream オブジェクトを取得します。

BaudRate

シリアル ボー レートを取得または設定します。

BreakState

ブレーク シグナルの状態を取得または設定します。

BytesToRead

受信バッファー内のデータのバイト数を取得します。

BytesToWrite

送信バッファー内のデータのバイト数を取得します。

CanRaiseEvents

コンポーネントがイベントを発生させることがきるかどうかを示す値を取得します。

(継承元 Component)
CDHolding

ポートのキャリア検出ラインの状態を取得します。

Container

IContainer を含む Component を取得します。

(継承元 Component)
CtsHolding

Clear To Send ラインの状態を取得します。

DataBits

バイトごとのデータ ビットの標準の長さを取得または設定します。

DesignMode

Component が現在デザイン モードかどうかを示す値を取得します。

(継承元 Component)
DiscardNull

ポートと受信バッファー間での送信時に、null バイトを無視するかどうかを示す値を取得または設定します。

DsrHolding

DSR (Data Set Ready) シグナルの状態を取得します。

DtrEnable

シリアル通信中に、DTR (Data Terminal Ready) シグナルを有効にする値を取得または設定します。

Encoding

テキストの伝送前変換と伝送後変換のバイト エンコーディングを取得または設定します。

Events

Component に結び付けられているイベント ハンドラーのリストを取得します。

(継承元 Component)
Handshake

Handshake からの値を使用したデータのシリアル ポート伝送のハンドシェイク プロトコルを取得または設定します。

IsOpen

SerialPort オブジェクトの開いている状態または閉じた状態を示す値を取得します。

NewLine

ReadLine() メソッドと WriteLine(String) メソッドの呼び出しの末尾を解釈する際に使用する値を取得または設定します。

Parity

パリティ チェック プロトコルを取得または設定します。

ParityReplace

パリティ エラーの発生時に、データ ストリーム内の無効なバイトを置き換えるバイトを取得または設定します。

PortName

通信用のポートを取得または設定します。このポートには、使用可能なすべての COM ポートが含まれますが、これに限定されるわけではありません。

ReadBufferSize

SerialPort の入力バッファーのサイズを取得または設定します。

ReadTimeout

読み取り操作が完了していないときに、タイムアウトになるまでのミリ秒数を取得または設定します。

ReceivedBytesThreshold

DataReceived イベントが発生する前の、内部入力バッファーのバイト数を取得または設定します。

RtsEnable

シリアル通信中に、RTS (Request To Send) シグナルが有効かどうかを示す値を取得または設定します。

Site

ComponentISite を取得または設定します。

(継承元 Component)
StopBits

バイトごとのストップ ビットの標準の数を取得または設定します。

WriteBufferSize

シリアル ポートの出力バッファーのサイズを取得または設定します。

WriteTimeout

書き込み操作が完了していないときに、タイムアウトになるまでのミリ秒数を取得または設定します。

メソッド

Close()

ポート接続を閉じ、IsOpen プロパティを false に設定し、内部 Stream オブジェクトを破棄します。

CreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要な情報をすべて格納しているオブジェクトを作成します。

(継承元 MarshalByRefObject)
DiscardInBuffer()

シリアル ドライバーの受信バッファーからデータを破棄します。

DiscardOutBuffer()

シリアル ドライバーの送信バッファーからデータを破棄します。

Dispose()

Component によって使用されているすべてのリソースを解放します。

(継承元 Component)
Dispose(Boolean)

SerialPort によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetLifetimeService()
古い.

対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サービス オブジェクトを取得します。

(継承元 MarshalByRefObject)
GetPortNames()

現在のコンピューターのシリアル ポート名の配列を取得します。

GetService(Type)

Component またはその Container で提供されるサービスを表すオブジェクトを返します。

(継承元 Component)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
InitializeLifetimeService()
古い.

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。

(継承元 MarshalByRefObject)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
MemberwiseClone(Boolean)

現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。

(継承元 MarshalByRefObject)
Open()

新しいシリアル ポート接続を開きます。

Read(Byte[], Int32, Int32)

SerialPort の入力バッファーから複数のバイトを読み取り、読み取ったバイトを指定したオフセットでバイト配列に書き込みます。

Read(Char[], Int32, Int32)

SerialPort の入力バッファーから複数の文字を読み取り、読み取った文字を指定したオフセットで文字配列に書き込みます。

ReadByte()

SerialPort の入力バッファーから、同期で 1 バイトを読み取ります。

ReadChar()

SerialPort の入力バッファーから、同期で 1 文字を読み取ります。

ReadExisting()

ストリームと SerialPort オブジェクトの入力バッファーの両方で、エンコーディングに基づいて、即座に使用できるすべてのバイトを読み取ります。

ReadLine()

入力バッファー内の NewLine 値まで読み取ります。

ReadTo(String)

入力バッファー内の指定した value まで文字列を読み取ります。

ToString()

Component の名前 (存在する場合) を格納する String を返します。 このメソッドはオーバーライドできません。

(継承元 Component)
Write(Byte[], Int32, Int32)

バッファーのデータを使用して、指定したバイト数をシリアル ポートに書き込みます。

Write(Char[], Int32, Int32)

バッファーのデータを使用して、指定した文字数をシリアル ポートに書き込みます。

Write(String)

指定した文字列をシリアル ポートに書き込みます。

WriteLine(String)

指定した文字列と NewLine 値を出力バッファーに書き込みます。

イベント

DataReceived

SerialPort オブジェクトによって表されるポートを介してデータが受信されたことを示します。

Disposed

Dispose() メソッドの呼び出しによってコンポーネントが破棄されるときに発生します。

(継承元 Component)
ErrorReceived

SerialPort オブジェクトによって表されるポートでエラーが発生したことを示します。

PinChanged

非データ信号イベントが SerialPort オブジェクトによって表されるポートで発生したことを示します。

適用対象

製品 バージョン
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1