点评:这个例子包括了这个控件几乎所有的操作,非常有参考价值.serialPort是在.net framework2.0中才有的东西,感觉这个东西和MSCOMM很相似.这里给出的例子是基于vb.net和CSHAPE
的,相应的可以在Cshape和c++中使用,基本上都是一样的.
Imports System Imports System.IO.Ports Imports System.Threading Public Class PortChat Shared _continue As Boolean Shared _serialPort As SerialPort
Public Shared Sub Main() Dim name As String Dim message As String Dim sComparer As StringComparer = StringComparer.OrdinalIgnoreCase Dim readThread As Thread = 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 sComparer.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 ex As TimeoutException ' Do nothing End Try End While End Sub
Public Shared Function SetPortName(ByVal defaultPortName As String) As String Dim newPortName As String
Console.WriteLine("Available Ports:") Dim s As String For Each s In SerialPort.GetPortNames() Console.WriteLine(" {0}", s) Next s
Console.Write("COM port({0}): ", defaultPortName) newPortName = Console.ReadLine()
If newPortName = "" Then newPortName = defaultPortName End If Return newPortName End Function
Public Shared Function SetPortBaudRate(ByVal defaultPortBaudRate As Integer) As Integer Dim newBaudRate As String
Console.Write("Baud Rate({0}): ", defaultPortBaudRate) newBaudRate = Console.ReadLine()
If newBaudRate = "" Then newBaudRate = defaultPortBaudRate.ToString() End If
Return Integer.Parse(newBaudRate) End Function
Public Shared Function SetPortParity(ByVal defaultPortParity As Parity) As Parity Dim newParity As String
Console.WriteLine("Available Parity options:") Dim s As String For Each s In [Enum].GetNames(GetType(Parity)) Console.WriteLine(" {0}", s) Next s
Console.Write("Parity({0}):", defaultPortParity.ToString()) newparity = Console.ReadLine()
If newparity = "" Then newparity = defaultPortParity.ToString() End If
Return CType([Enum].Parse(GetType(Parity), newParity), Parity) End Function
Public Shared Function SetPortDataBits(ByVal defaultPortDataBits As Integer) As Integer Dim newDataBits As String
Console.Write("Data Bits({0}): ", defaultPortDataBits) newDataBits = Console.ReadLine()
If newDataBits = "" Then newDataBits = defaultPortDataBits.ToString() End If
Return Integer.Parse(newDataBits) End Function
Public Shared Function SetPortStopBits(ByVal defaultPortStopBits As StopBits) As StopBits Dim newStopBits As String
Console.WriteLine("Available Stop Bits options:") Dim s As String For Each s In [Enum].GetNames(GetType(StopBits)) Console.WriteLine(" {0}", s) Next s
Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString()) newStopBits = Console.ReadLine()
If newStopBits = "" Then newStopBits = defaultPortStopBits.ToString() End If
Return CType([Enum].Parse(GetType(StopBits), newStopBits), StopBits) End Function
Public Shared Function SetPortHandshake(ByVal defaultPortHandshake As Handshake) As Handshake Dim newHandshake As String
Console.WriteLine("Available Handshake options:") Dim s As String For Each s In [Enum].GetNames(GetType(Handshake)) Console.WriteLine(" {0}", s) Next s
Console.Write("Stop Bits({0}):", defaultPortHandshake.ToString()) newHandshake = Console.ReadLine()
If newHandshake = "" Then newHandshake = defaultPortHandshake.ToString() End If
Return CType([Enum].Parse(GetType(Handshake), newHandshake), Handshake) End Function End Class
|
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) { } } }
public static string SetPortName(string defaultPortName) { string portName;
Console.WriteLine("Available Ports:"); foreach (string s in SerialPort.GetPortNames()) { Console.WriteLine(" {0}", s); }
Console.Write("COM port({0}): ", defaultPortName); portName = Console.ReadLine();
if (portName == "") { portName = defaultPortName; } return portName; }
public static int SetPortBaudRate(int defaultPortBaudRate) { string baudRate;
Console.Write("Baud Rate({0}): ", defaultPortBaudRate); baudRate = Console.ReadLine();
if (baudRate == "") { baudRate = defaultPortBaudRate.ToString(); }
return int.Parse(baudRate); }
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("Parity({0}):", defaultPortParity.ToString()); parity = Console.ReadLine();
if (parity == "") { parity = defaultPortParity.ToString(); }
return (Parity)Enum.Parse(typeof(Parity), parity); }
public static int SetPortDataBits(int defaultPortDataBits) { string dataBits;
Console.Write("Data Bits({0}): ", defaultPortDataBits); dataBits = Console.ReadLine();
if (dataBits == "") { dataBits = defaultPortDataBits.ToString(); }
return int.Parse(dataBits); } public static StopBits SetPortStopBits(StopBits defaultPortStopBits) { string stopBits;
Console.WriteLine("Available Stop Bits options:"); foreach (string s in Enum.GetNames(typeof(StopBits))) { Console.WriteLine(" {0}", s); }
Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString()); stopBits = Console.ReadLine();
if (stopBits == "") { stopBits = defaultPortStopBits.ToString(); }
return (StopBits)Enum.Parse(typeof(StopBits), stopBits); }
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("Stop Bits({0}):", defaultPortHandshake.ToString()); handshake = Console.ReadLine();
if (handshake == "") { handshake = defaultPortHandshake.ToString(); }
return (Handshake)Enum.Parse(typeof(Handshake), handshake); } }
|
阅读(12835) | 评论(1) | 转发(0) |