シリアル通信する

.NET2.0からはSerialPortをつかえばよろしい

以下参考URL

引っかかりやすいのは、以下のような内容

SerialPortクラスのDataReceivedイベントは内部では非同期コールバックを使用しており、イ
ベントハンドラはセカンダリスレッドからコールバックされるので、
SerialPortクラスをコントロールとして、Formや他のコントロール上で使用する場合は、
適切なInvokメソッドやMethodInvokerクラスを使用して、
UIスレッドと同期する必要があることに注意する必要がある
次のDtrEnable、RtsEnable はRS-232Cを使用するにあたって必要となる設定です。
これらはRS-232CのDTR、RTSと呼ばれる信号線に対応しています。
DTRはData Terminal Readyの頭文字で、
データを受信する準備ができたことを相手機器に伝えます。
RTSはRequest To Sendの頭文字で、
相手機器にデータを送信していいことを伝えます。

ただ、これらは常に必要となるわけではありません。
DTR、RTSなどの信号線をどのように扱うかは相手機器次第となりますので、
それにあわせる必要があります。
上述したようなVirtual PCの名前付きパイプを使ったテスト環境ではDtrEnable、
RtsEnableともにTrueとしてやらないと正常に通信することができませんでした。
しかし、筆者が所有しているオムロン社製のモデムではDtrEnableのみを
Trueとすることで通信を行うことができました。