SerialPort.Open メソッド

定義

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

public:
 void Open();
public void Open();
member this.Open : unit -> unit
Public Sub Open ()

例外

ポートへのアクセスが拒否されます。

-または-

現在のプロセスまたはシステム上の別のプロセスでは、指定された COM ポートが既に SerialPort インスタンスまたはアンマネージ コードで開かれています。

このインスタンスの 1 つ以上のプロパティが無効です。 たとえば、 ParityDataBits、または Handshake のプロパティは有効な値ではありません。 BaudRate は 0 以下です。 ReadTimeout または WriteTimeout プロパティは 0 未満であり、 InfiniteTimeoutされません。

ポート名が "COM" で始まらない。

-または-

ポートのファイルの種類はサポートされていません。

ポートが無効な状態です。

-または-

基になるポートの状態を設定できませんでした。 たとえば、この SerialPort オブジェクトから渡されたパラメーターが無効です。

SerialPortの現在のインスタンスで指定されたポートが既に開いています。

次のコード例では、 SerialPort クラスを使用して、2 人のユーザーが、null モデム ケーブルで接続された 2 つの個別のコンピューターからチャットできるようにします。 この例では、チャットを行う前に、ユーザーにポート設定とユーザー名の入力を求められます。 このコード例は、 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) { }
    }
}
Public Shared Sub Main()
    Dim name As String
    Dim message As String
    Dim stringComparer__1 As StringComparer = StringComparer.OrdinalIgnoreCase
    Dim readThread As New Thread(AddressOf 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__1.Equals("quit", message) Then
            _continue = False
        Else
            _serialPort.WriteLine([String].Format("<{0}>: {1}", name, message))
        End If
    End While

    readThread.Join()
    _serialPort.Close()
End Sub

Public Shared Sub Read()
    While _continue
        Try
            Dim message As String = _serialPort.ReadLine()
            Console.WriteLine(message)
        Catch generatedExceptionName As TimeoutException
        End Try
    End While
End Sub

注釈

SerialPort オブジェクトごとに 1 つの開いている接続しか存在できません。

任意のアプリケーションのベスト プラクティスは、 Close メソッドを呼び出した後、 Open メソッドを呼び出そうとする前にしばらく待機することです。これは、ポートがすぐに閉じられない可能性があるためです。

適用対象