Welcome

首页 / 软件开发 / .NET编程技术 / .NET Compact Framework下的串口通信

.NET Compact Framework下的串口通信2011-07-24 博客园 Jake.NET在Wince和Windows Mobile下,很多设备以串口(Serial Port/Com Port)的方式提供访问接口,例如 可以通过串口访问GPS的receiver,从而接收NMEA Data。

在CF.NET2.0开始,MS把串口操作封装了到System.IO.Ports.SerialPort里面,大大简便了对串口的操 作,不再需要P/Invoke就可以直接操作串口。

下面展现两个串口通信类,一个负责发生,一个负责接收,两个类分别在不要的设备上运行。

public class ReceiverPort : IDisposable
{
private readonly System.IO.Ports.SerialPort serialPort;

public ReceiverPort()
{
serialPort = new System.IO.Ports.SerialPort("COM1", 4800,

System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
serialPort.Handshake = System.IO.Ports.Handshake.None;

try
{
serialPort.DataReceived += new

System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort_DataReceived);
serialPort.Open();
if (serialPort.IsOpen)
{
Console.WriteLine("Open the serial port successful");
}
else
{
Console.WriteLine("Fail to open the serial port");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}

public void Dispose()
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
serialPort.Dispose();
}

private void serialPort_DataReceived(object sender,

System.IO.Ports.SerialDataReceivedEventArgs e)
{
Console.WriteLine("RECEIVED:" + serialPort.ReadLine());
}
}

public class SenderPort : IDisposable
{
private readonly System.IO.Ports.SerialPort serialPort;

public SenderPort()
{
serialPort = new System.IO.Ports.SerialPort("COM1", 4800,

System.IO.Ports.Parity.None, 8,
System.IO.Ports.StopBits.One);
serialPort.Handshake = System.IO.Ports.Handshake.None;

try
{
serialPort.Open();
if (serialPort.IsOpen)
{
Console.WriteLine("Open the serial port successful");
}
else
{
Console.WriteLine("Fail to open the serial port");
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}

public void Dispose()
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
serialPort.Dispose();
}

public bool Send(string str)
{
try
{
if (serialPort.IsOpen)
{
Console.WriteLine("SENT:" + str);
serialPort.WriteLine(str + " ");
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
}