SerialPort Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет ресурс последовательного порта.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Наследование
Примеры
В следующем примере кода показано использование класса, позволяющего SerialPort двум пользователям общаться с двух отдельных компьютеров, подключенных с помощью кабеля модема NULL. В этом примере пользователям предлагается задать параметры порта и имя пользователя перед чатом. Оба компьютера должны выполнять программу для достижения полной функциональности этого примера.
// Use this code inside a project created with the Visual C# > Windows Desktop > Console Application template.
// Replace the code in Program.cs with this code.
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("Enter Handshake value (Default: {0}):", defaultPortHandshake.ToString());
handshake = Console.ReadLine();
if (handshake == "")
{
handshake = defaultPortHandshake.ToString();
}
return (Handshake)Enum.Parse(typeof(Handshake), handshake, true);
}
}
' Use this code inside a project created with the Visual Basic > Windows Desktop > Console Application template.
' Replace the default code in Module1.vb with this code. Then right click the project in Solution Explorer,
' select Properties, and set the Startup Object to PortChat.
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 stringComparer__1 As StringComparer = StringComparer.OrdinalIgnoreCase
Dim readThread As 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 stringComparer__1.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 generatedExceptionName As TimeoutException
End Try
End While
End Sub
' Display Port values and prompt user to enter a port.
Public Shared Function SetPortName(defaultPortName As String) As String
Dim portName As String
Console.WriteLine("Available Ports:")
For Each s As String In SerialPort.GetPortNames()
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter COM port value (Default: {0}): ", defaultPortName)
portName = Console.ReadLine()
If portName = "" OrElse Not (portName.ToLower()).StartsWith("com") Then
portName = defaultPortName
End If
Return portName
End Function
' Display BaudRate values and prompt user to enter a value.
Public Shared Function SetPortBaudRate(defaultPortBaudRate As Integer) As Integer
Dim baudRate As String
Console.Write("Baud Rate(default:{0}): ", defaultPortBaudRate)
baudRate = Console.ReadLine()
If baudRate = "" Then
baudRate = defaultPortBaudRate.ToString()
End If
Return Integer.Parse(baudRate)
End Function
' Display PortParity values and prompt user to enter a value.
Public Shared Function SetPortParity(defaultPortParity As Parity) As Parity
Dim parity As String
Console.WriteLine("Available Parity options:")
For Each s As String In [Enum].GetNames(GetType(Parity))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter Parity value (Default: {0}):", defaultPortParity.ToString(), True)
parity = Console.ReadLine()
If parity = "" Then
parity = defaultPortParity.ToString()
End If
Return CType([Enum].Parse(GetType(Parity), parity, True), Parity)
End Function
' Display DataBits values and prompt user to enter a value.
Public Shared Function SetPortDataBits(defaultPortDataBits As Integer) As Integer
Dim dataBits As String
Console.Write("Enter DataBits value (Default: {0}): ", defaultPortDataBits)
dataBits = Console.ReadLine()
If dataBits = "" Then
dataBits = defaultPortDataBits.ToString()
End If
Return Integer.Parse(dataBits.ToUpperInvariant())
End Function
' Display StopBits values and prompt user to enter a value.
Public Shared Function SetPortStopBits(defaultPortStopBits As StopBits) As StopBits
Dim stopBits As String
Console.WriteLine("Available StopBits options:")
For Each s As String In [Enum].GetNames(GetType(StopBits))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter StopBits value (None is not supported and " &
vbLf & "raises an ArgumentOutOfRangeException. " &
vbLf & " (Default: {0}):", defaultPortStopBits.ToString())
stopBits = Console.ReadLine()
If stopBits = "" Then
stopBits = defaultPortStopBits.ToString()
End If
Return CType([Enum].Parse(GetType(StopBits), stopBits, True), StopBits)
End Function
Public Shared Function SetPortHandshake(defaultPortHandshake As Handshake) As Handshake
Dim handshake As String
Console.WriteLine("Available Handshake options:")
For Each s As String In [Enum].GetNames(GetType(Handshake))
Console.WriteLine(" {0}", s)
Next
Console.Write("Enter Handshake value (Default: {0}):", defaultPortHandshake.ToString())
handshake = Console.ReadLine()
If handshake = "" Then
handshake = defaultPortHandshake.ToString()
End If
Return CType([Enum].Parse(GetType(Handshake), handshake, True), Handshake)
End Function
End Class
Комментарии
Используйте этот класс для управления ресурсом файла последовательного порта. Этот класс обеспечивает синхронный и управляемый событиями операции ввода-вывода, доступ к состояниям закрепления и разрыва и доступ к свойствам последовательного драйвера. Кроме того, функциональные возможности этого класса можно упаковать в внутренний Stream объект, доступный через BaseStream свойство, и передать в классы, которые упаковывают или используют потоки.
Класс SerialPort поддерживает следующие кодировки: ASCIIEncoding, UTF8Encoding, UnicodeEncodingUTF32Encodingи любая кодировка, определенная в mscorlib.dll где кодовая страница меньше 50000 или кодовая страница составляет 54936. Вы можете использовать альтернативные кодировки, но необходимо использовать ReadByte или Write метод и самостоятельно выполнить кодировку.
Метод используется GetPortNames для получения допустимых портов для текущего компьютера.
SerialPort Если объект блокируется во время операции чтения, не прерывайте поток. Вместо этого закройте базовый поток или удалите SerialPort объект.
Конструкторы
| Имя | Описание |
|---|---|
| SerialPort() |
Инициализирует новый экземпляр класса SerialPort. |
| SerialPort(IContainer) |
Инициализирует новый экземпляр класса с помощью указанного SerialPortIContainer объекта. |
| SerialPort(String, Int32, Parity, Int32, StopBits) |
Инициализирует новый экземпляр класса с помощью указанного SerialPort имени порта, скорости четности, бита четности, битов данных и остановки бита. |
| SerialPort(String, Int32, Parity, Int32) |
Инициализирует новый экземпляр класса с помощью указанного SerialPort имени порта, скорости baud, бита четности и битов данных. |
| SerialPort(String, Int32, Parity) |
Инициализирует новый экземпляр класса с помощью указанного SerialPort имени порта, скорости четности и бита четности. |
| SerialPort(String, Int32) |
Инициализирует новый экземпляр класса с помощью указанного SerialPort имени порта и скорости baud. |
| SerialPort(String) |
Инициализирует новый экземпляр класса с помощью указанного SerialPort имени порта. |
Поля
| Имя | Описание |
|---|---|
| InfiniteTimeout |
Указывает, что время ожидания не должно происходить. |
Свойства
| Имя | Описание |
|---|---|
| BaseStream |
Возвращает базовый Stream объект для SerialPort объекта. |
| BaudRate |
Возвращает или задает последовательную частоту baud. |
| BreakState |
Возвращает или задает состояние сигнала останова. |
| BytesToRead |
Возвращает количество байтов данных в буфере получения. |
| BytesToWrite |
Возвращает количество байтов данных в буфере отправки. |
| CanRaiseEvents |
Возвращает значение, указывающее, может ли компонент вызвать событие. (Унаследовано от Component) |
| CDHolding |
Возвращает состояние строки "Обнаружение оператора" для порта. |
| Container |
Возвращает объект IContainer , содержащий Componentобъект . (Унаследовано от Component) |
| CtsHolding |
Возвращает состояние строки Clear-to-Send. |
| DataBits |
Возвращает или задает стандартную длину битов данных на байт. |
| DesignMode |
Возвращает значение, указывающее, находится ли текущий Component режим разработки. (Унаследовано от Component) |
| DiscardNull |
Возвращает или задает значение, указывающее, игнорируются ли байты NULL при передаче между портом и буфером получения. |
| DsrHolding |
Возвращает состояние сигнала "Готово к набору данных" (DSR). |
| DtrEnable |
Возвращает или задает значение, которое позволяет сигналу "Готово к использованию терминала данных" (DTR) во время последовательного взаимодействия. |
| Encoding |
Получает или задает кодировку байтов для преобразования текста до и после передачи. |
| Events |
Возвращает список обработчиков событий, подключенных к этому Component. (Унаследовано от Component) |
| Handshake |
Возвращает или задает протокол подтверждения для последовательной передачи данных через порт с помощью значения.Handshake |
| IsOpen |
Возвращает значение, указывающее состояние открытого или закрытого SerialPort объекта. |
| NewLine |
Возвращает или задает значение, используемое для интерпретации конца вызова ReadLine() и WriteLine(String) методов. |
| Parity |
Возвращает или задает протокол проверки четности. |
| ParityReplace |
Возвращает или задает байт, который заменяет недопустимые байты в потоке данных при возникновении ошибки четности. |
| PortName |
Возвращает или задает порт для обмена данными, включая не только все доступные COM-порты. |
| ReadBufferSize |
Возвращает или задает размер входного буфера SerialPort . |
| ReadTimeout |
Возвращает или задает количество миллисекунда до истечения времени ожидания, когда операция чтения не завершается. |
| ReceivedBytesThreshold |
Возвращает или задает количество байтов во внутреннем входном буфере перед событием DataReceived . |
| RtsEnable |
Возвращает или задает значение, указывающее, включен ли сигнал запроса на отправку (RTS) во время последовательного взаимодействия. |
| Site |
Возвращает или задает ISite объект Component. (Унаследовано от Component) |
| StopBits |
Возвращает или задает стандартное число стоп-битов на байт. |
| WriteBufferSize |
Возвращает или задает размер выходного буфера вывода последовательного порта. |
| WriteTimeout |
Возвращает или задает количество миллисекунда до истечения времени ожидания, когда операция записи не завершается. |
Методы
| Имя | Описание |
|---|---|
| Close() |
Закрывает подключение к порту, задает IsOpen для свойства |
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| DiscardInBuffer() |
Удаляет данные из буфера получения последовательного драйвера. |
| DiscardOutBuffer() |
Удаляет данные из буфера передачи последовательного драйвера. |
| Dispose() |
Освобождает все ресурсы, используемые параметром Component. (Унаследовано от Component) |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые SerialPort и при необходимости освобождает управляемые ресурсы. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetLifetimeService() |
Устаревшие..
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetPortNames() |
Возвращает массив имен последовательных портов для текущего компьютера. |
| GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую 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(String) |
Считывает строку до указанного |
| ToString() |
String Возвращает имя, содержащее имя , если таковое Componentимеется. Этот метод не должен быть переопределен. (Унаследовано от Component) |
| Write(Byte[], Int32, Int32) |
Записывает указанное число байтов в последовательный порт с помощью данных из буфера. |
| Write(Char[], Int32, Int32) |
Записывает указанное число символов в последовательный порт с помощью данных из буфера. |
| Write(String) |
Записывает указанную строку в последовательный порт. |
| WriteLine(String) |
Записывает указанную строку и NewLine значение в выходной буфер. |
События
| Имя | Описание |
|---|---|
| DataReceived |
Указывает, что данные были получены через порт, SerialPort представленный объектом. |
| Disposed |
Происходит при удалении компонента вызовом Dispose() метода. (Унаследовано от Component) |
| ErrorReceived |
Указывает, что произошла ошибка с портом, SerialPort представленным объектом. |
| PinChanged |
Указывает, что событие сигнала, отличное от данных, произошло на порту, представленном SerialPort объектом. |