for WPF developers
Home Profile Tips 全記事一覧

ポートの解放と閉鎖

(2016/12/03 0:31:43 created.)

C# で RS-232C 通信をおこなうには、System.IO.Ports.SerialPort クラスを使用します。インスタンス生成時または生成後にポート名やボーレートなどを指定します。その後、Open() メソッドでポートオープン、Close() メソッドでポートクローズをおこないます。ただし、SerialPort クラスは IDisposable インターフェースを実装しているクラスでもあるため、下記コードのように using を使用することで、Close() メソッドを省略することもできます。どちらにしろ、ポートオープン中は他のアプリケーションからアクセスできなくなるため、忘れずにポートを閉じるようにしましょう。

Program.cs
  1. namespace Tips_Serial
  2. {
  3.     using System;
  4.     using System.IO.Ports;
  5.     using System.Text;
  6.  
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             using (var serial = new SerialPort()
  12.             {
  13.                 PortName = "COM11",
  14.                 BaudRate = 9600,
  15.                 DataBits = 8,
  16.                 Parity = Parity.None,
  17.                 StopBits = StopBits.One,
  18.                 DtrEnable = false,
  19.                 RtsEnable = false,
  20.                 ReadBufferSize = 256,
  21.                 WriteBufferSize = 256,
  22.                 Encoding = Encoding.GetEncoding("Shift_JIS"),
  23.             })
  24.             {
  25.                 try
  26.                 {
  27.                     // ポートオープン
  28.                     serial.Open();
  29.                 }
  30.                 catch (Exception ex)
  31.                 {
  32.                     Console.WriteLine(ex);
  33.                 }
  34.                 finally
  35.                 {
  36.                     Console.WriteLine("{0} ポートを" + (serial.IsOpen ? "開きました。" : "開けませんでした。"), serial.PortName);
  37.                 }
  38.  
  39.                 Console.ReadKey();
  40.             }
  41.         }
  42.     }
  43. }

ポートが既に他のアプリケーションによって使用されているとき、UnAuthorizedAccessException 例外が発生するため、try-catch 構文で適切に対処しておいたほうが良いでしょう。