SerialPort 类

SerialPort 类

.NET Framework 4.6 and 4.5

表示串行端口资源。

System.Object 
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.IO.Ports.SerialPort

命名空间:   System.IO.Ports
程序集:  System(在 System.dll 中)

public class SerialPort : Component

SerialPort 类型公开以下成员。

显示: 
  名称 说明
公共方法 SerialPort() 初始化 SerialPort 类的新实例。
公共方法 SerialPort(IContainer) 使用指定的 IContainer 对象初始化 SerialPort 类的新实例。
公共方法 SerialPort(String) 使用指定的端口名称初始化 SerialPort 类的新实例。
公共方法 SerialPort(String, Int32) 使用指定的端口名称和波特率初始化 SerialPort 类的新实例。
公共方法 SerialPort(String, Int32, Parity) 使用指定的端口名称、波特率和奇偶校验位初始化 SerialPort 类的新实例。
公共方法 SerialPort(String, Int32, Parity, Int32) 使用指定的端口名称、波特率、校验位和数据位初始化 SerialPort 类的新实例。
公共方法 SerialPort(String, Int32, Parity, Int32, StopBits) 使用指定的端口名称、波特率、奇偶校验位、数据位和停止位初始化SerialPort 类的新实例。
页首

显示: 
  名称 说明
公共属性 BaseStream 获取 SerialPort 对象的基础 Stream 对象。
公共属性 BaudRate 获取或设置串行波特率。
公共属性 BreakState 获取或设置中断信号状态。
公共属性 BytesToRead 获取接收缓冲区中数据的字节数。
公共属性 BytesToWrite 获取发送缓冲区中数据的字节数。
受保护的属性 CanRaiseEvents 获取一个指示组件是否可以引发事件的值。 (继承自 Component。)
公共属性 CDHolding 获取端口的载波检测行的状态。
公共属性 Container 获取 IContainer,它包含 Component (继承自 Component。)
公共属性 CtsHolding 获取“可以发送”行的状态。
公共属性 DataBits 获取或设置每个字节的标准数据位长度。
受保护的属性 DesignMode 获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自Component。)
公共属性 DiscardNull 获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略。
公共属性 DsrHolding 获取数据设置就绪 (DSR) 信号的状态。
公共属性 DtrEnable 获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号。
公共属性 Encoding 获取或设置传输前后文本转换的字节编码。
受保护的属性 Events 获取附加到此 Component 的事件处理程序的列表。 (继承自 Component。)
公共属性 Handshake 获取或设置串行端口数据传输的握手协议。
公共属性 IsOpen 获取一个值,该值指示 SerialPort 对象的打开或关闭状态。
公共属性 NewLine 获取或设置用于解释 ReadLine 和 WriteLine 方法调用结束的值。
公共属性 Parity 获取或设置奇偶校验检查协议。
公共属性 ParityReplace 获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节。
公共属性 PortName 获取或设置通信端口,包括但不限于所有可用的 COM 端口。
公共属性 ReadBufferSize 获取或设置 SerialPort 输入缓冲区的大小。
公共属性 ReadTimeout 获取或设置读取操作未完成时发生超时之前的毫秒数。
公共属性 ReceivedBytesThreshold 获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数。
公共属性 RtsEnable 获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号。
公共属性 Site 获取或设置 Component 的 ISite (继承自 Component。)
公共属性 StopBits 获取或设置每个字节的标准停止位数。
公共属性 WriteBufferSize 获取或设置串行端口输出缓冲区的大小。
公共属性 WriteTimeout 获取或设置写入操作未完成时发生超时之前的毫秒数。
页首

显示: 
  名称 说明
公共方法 Close 关闭端口连接,将 IsOpen 属性设置为 false,并释放内部 Stream 对象。
公共方法 CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
公共方法 DiscardInBuffer 丢弃来自串行驱动程序的接收缓冲区的数据。
公共方法 DiscardOutBuffer 丢弃来自串行驱动程序的传输缓冲区的数据。
公共方法 Dispose() 释放由 Component 使用的所有资源。 (继承自 Component。)
受保护的方法 Dispose(Boolean) 释放由 SerialPort 占用的非托管资源,还可以另外再释放托管资源。 (重写Component.Dispose(Boolean)。)
公共方法 Equals(Object) 确定指定的对象是否等于当前对象。 (继承自 Object。)
受保护的方法 Finalize 在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。(继承自 Component。)
公共方法 GetHashCode 作为默认哈希函数。 (继承自 Object。)
公共方法 GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自MarshalByRefObject。)
公共方法静态成员 GetPortNames 获取当前计算机的串行端口名称数组。
受保护的方法 GetService 返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。 (继承自 Component。)
公共方法 GetType 获取当前实例的 Type (继承自 Object。)
公共方法 InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自MarshalByRefObject。)
受保护的方法 MemberwiseClone() 创建当前 Object 的浅表副本。 (继承自 Object。)
受保护的方法 MemberwiseClone(Boolean) 创建当前 MarshalByRefObject 对象的浅表副本。 (继承自MarshalByRefObject。)
公共方法 Open 打开一个新的串行端口连接。
公共方法 Read(Byte[], Int32, Int32) 从 SerialPort 输入缓冲区读取一些字节并将那些字节写入字节数组中指定的偏移量处。
公共方法 Read(Char[], Int32, Int32) 从 SerialPort 输入缓冲区中读取大量字符,然后将这些字符写入到一个字符数组中指定的偏移量处。
公共方法 ReadByte 从 SerialPort 输入缓冲区中同步读取一个字节。
公共方法 ReadChar 从 SerialPort 输入缓冲区中同步读取一个字符。
公共方法 ReadExisting 在编码的基础上,读取 SerialPort 对象的流和输入缓冲区中所有立即可用的字节。
公共方法 ReadLine 一直读取到输入缓冲区中的 NewLine 值。
公共方法 ReadTo 一直读取到输入缓冲区中的指定 value 的字符串。
公共方法 ToString 返回包含 Component 的名称的 String(如果有)。 不应重写此方法。 (继承自Component。)
公共方法 Write(String) 将指定的字符串写入串行端口。
公共方法 Write(Byte[], Int32, Int32) 使用缓冲区的数据将指定数量的字节写入串行端口。
公共方法 Write(Char[], Int32, Int32) 使用缓冲区的数据将指定数量的字符写入串行端口。
公共方法 WriteLine 将指定的字符串和 NewLine 值写入输出缓冲区。
页首

显示: 
  名称 说明
公共事件 DataReceived 表示将处理 SerialPort 对象的数据接收事件的方法。
公共事件 Disposed 当通过调用 Dispose 方法释放组件时发生。 (继承自 Component。)
公共事件 ErrorReceived 表示处理 SerialPort 对象的错误事件的方法。
公共事件 PinChanged 表示将处理 SerialPort 对象的串行管脚更改事件的方法。
页首

显示: 
  名称 说明
公共字段静态成员 InfiniteTimeout 指示不应该发生超时。
页首

此类用于控制串行端口文件资源。 此类提供同步 I/O 和事件驱动的 I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。 另外,此类的功能可以包装在内部 Stream 对象中,可通过 BaseStream 属性访问,并且可以传递给包装或使用流的类。

SerialPort 选件类支持以下编码:ASCIIEncodingUTF8EncodingUnicodeEncodingUTF32Encoding以及代码页的 mscorlib.dll 中定义的任何编码表示小于 50000 或代码页是 54936。可以使用备用编码,但是,您必须使用 ReadByte 或 Write 方法和执行编码。

您使用 GetPortNames 方法检索当前计算机的有效的端口。

如果 SerialPort 对象在一次读取操作时被阻止,不要中止线程。 相反,关闭基础流或部署SerialPort 对象。

下面的代码示例演示如何使用 SerialPort 类以允许两位用户分别在两台通过 NULL 调制解调器电缆连接的独立计算机上聊天。 本示例中,在聊天之前将提示用户输入端口设置和用户名。 这两台计算机必须同时执行该程序才能实现本示例的全部功能。

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) { }
        }
    }

    // Display Port values and prompt user to enter a port.
    public static string SetPortName(string defaultPortName)
    {
        string portName;

        Console.WriteLine("Available Ports:");
        foreach (string s in SerialPort.GetPortNames())
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
        portName = Console.ReadLine();

        if (portName == "" || !(portName.ToLower()).StartsWith("com"))
        {
            portName = defaultPortName;
        }
        return portName;
    }
    // Display BaudRate values and prompt user to enter a value.
    public static int SetPortBaudRate(int defaultPortBaudRate)
    {
        string baudRate;

        Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate);
        baudRate = Console.ReadLine();

        if (baudRate == "")
        {
            baudRate = defaultPortBaudRate.ToString();
        }

        return int.Parse(baudRate);
    }

    // Display PortParity values and prompt user to enter a value.
    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("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), true);
        parity = Console.ReadLine();

        if (parity == "")
        {
            parity = defaultPortParity.ToString();
        }

        return (Parity)Enum.Parse(typeof(Parity), parity, true);
    }
    // Display DataBits values and prompt user to enter a value.
    public static int SetPortDataBits(int defaultPortDataBits)
    {
        string dataBits;

        Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits);
        dataBits = Console.ReadLine();

        if (dataBits == "")
        {
            dataBits = defaultPortDataBits.ToString();
        }

        return int.Parse(dataBits.ToUpperInvariant());
    }

    // Display StopBits values and prompt user to enter a value.
    public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
    {
        string stopBits;

        Console.WriteLine("Available StopBits options:");
        foreach (string s in Enum.GetNames(typeof(StopBits)))
        {
            Console.WriteLine("   {0}", s);
        }

        Console.Write("Enter StopBits value (None is not supported and \n" +
         "raises an ArgumentOutOfRangeException. \n (Default: {0}):", defaultPortStopBits.ToString());
        stopBits = Console.ReadLine();

        if (stopBits == "" )
        {
            stopBits = defaultPortStopBits.ToString();
        }

        return (StopBits)Enum.Parse(typeof(StopBits), stopBits, true);
    }
    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("End Handshake value (Default: {0}):", defaultPortHandshake.ToString());
        handshake = Console.ReadLine();

        if (handshake == "")
        {
            handshake = defaultPortHandshake.ToString();
        }

        return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
    }
}


.NET Framework
受以下版本支持:4.5.2、4.5.1、4.5、4、3.5、3.0、2.0
.NET Framework Client Profile
受以下版本支持:4、3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参阅 .NET Framework 系统要求

此类型的任何公共  static(在 Visual Basic 中为  Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

社区附加资源


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值