SerialPort Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje prostředek sériového portu.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Dědičnost
Příklady
Následující příklad kódu ukazuje použití SerialPort třídy, která umožňuje dvěma uživatelům chatovat ze dvou samostatných počítačů připojených kabelem modemu s hodnotou null. V tomto příkladu se uživatelům před chatováním zobrazí výzva k zadání nastavení portu a uživatelského jména. Oba počítače musí program spouštějí, aby bylo možné dosáhnout plné funkčnosti tohoto příkladu.
// 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
Poznámky
Tato třída slouží k řízení prostředku souboru sériového portu. Tato třída poskytuje synchronní vstupně-výstupní operace řízené událostmi, přístup ke stavům připnutí a přerušení a přístup k vlastnostem sériového ovladače. Kromě toho lze funkce této třídy zabalit do interního Stream objektu, přístupného prostřednictvím BaseStream vlastnosti a předány třídám, které zalamují nebo používají datové proudy.
Třída SerialPort podporuje následující kódování: ASCIIEncoding, , UTF8EncodingUnicodeEncoding, UTF32Encodinga jakékoli kódování definované v mscorlib.dll, kde kódová stránka je menší než 5 0000 nebo znaková stránka je 54936. Můžete použít alternativní kódování, ale musíte použít metodu ReadByte nebo Write metodu a provést kódování sami.
Tuto metodu GetPortNames použijete k načtení platných portů pro aktuální počítač.
SerialPort Pokud se objekt během operace čtení zablokuje, neodborujte vlákno. Místo toho buď zavřete základní datový proud, nebo odstraňte SerialPort objekt.
Konstruktory
| Name | Description |
|---|---|
| SerialPort() |
Inicializuje novou instanci SerialPort třídy. |
| SerialPort(IContainer) |
Inicializuje novou instanci SerialPort třídy pomocí zadaného IContainer objektu. |
| SerialPort(String, Int32, Parity, Int32, StopBits) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti, parity bitu, datových bitů a stop bitu. |
| SerialPort(String, Int32, Parity, Int32) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti, parity bitu a datových bitů. |
| SerialPort(String, Int32, Parity) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu, přenosové rychlosti a parity bit. |
| SerialPort(String, Int32) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu a přenosové rychlosti. |
| SerialPort(String) |
Inicializuje novou instanci třídy pomocí zadaného SerialPort názvu portu. |
Pole
| Name | Description |
|---|---|
| InfiniteTimeout |
Označuje, že by nemělo dojít k vypršení časového limitu. |
Vlastnosti
| Name | Description |
|---|---|
| BaseStream |
Získá základní Stream objekt pro SerialPort objekt. |
| BaudRate |
Získá nebo nastaví sériovou přenosovou rychlost. |
| BreakState |
Získá nebo nastaví stav signálu přerušení. |
| BytesToRead |
Získá početchchchchchch |
| BytesToWrite |
Získá počet bajtů dat v vyrovnávací paměti pro odesílání. |
| CanRaiseEvents |
Získá hodnotu určující, zda komponenta může vyvolat událost. (Zděděno od Component) |
| CDHolding |
Získá stav linky Carrier Detect pro port. |
| Container |
Získá ten IContainer , který obsahuje Component. (Zděděno od Component) |
| CtsHolding |
Získá stav řádku Clear-to-Send. |
| DataBits |
Získá nebo nastaví standardní délku datových bitů na bajt. |
| DesignMode |
Získá hodnotu, která označuje, zda Component je aktuálně v režimu návrhu. (Zděděno od Component) |
| DiscardNull |
Získá nebo nastaví hodnotu označující, zda jsou bajty null ignorovány při přenosu mezi portem a příjmovou vyrovnávací pamětí. |
| DsrHolding |
Získá stav signálu DSR (Data Set Ready). |
| DtrEnable |
Získá nebo nastaví hodnotu, která umožňuje signál Data Terminal Ready (DTR) během sériové komunikace. |
| Encoding |
Získá nebo nastaví kódování bajtů pro převod textu před a po přenosu. |
| Events |
Získá seznam obslužných rutin událostí, které jsou připojeny k tomuto Component. (Zděděno od Component) |
| Handshake |
Získá nebo nastaví handshaking protokol pro sériový port přenosu dat pomocí hodnoty z Handshake. |
| IsOpen |
Získá hodnotu označující otevřený nebo uzavřený stav objektu SerialPort . |
| NewLine |
Získá nebo nastaví hodnotu použitou k interpretaci konce volání ReadLine() a WriteLine(String) metod. |
| Parity |
Získá nebo nastaví paritní protokol kontroly. |
| ParityReplace |
Získá nebo nastaví bajt, který nahrazuje neplatné bajty v datovém proudu, když dojde k chybě parity. |
| PortName |
Získá nebo nastaví port pro komunikaci, včetně mimo jiné na všechny dostupné porty COM. |
| ReadBufferSize |
Získá nebo nastaví velikost SerialPort vstupní vyrovnávací paměti. |
| ReadTimeout |
Získá nebo nastaví počet milisekund před vypršením časového limitu, když operace čtení nedokončí. |
| ReceivedBytesThreshold |
Získá nebo nastaví počet bajtů v interní vstupní vyrovnávací paměti před událostí DataReceived . |
| RtsEnable |
Získá nebo nastaví hodnotu určující, zda požadavek odeslat (RTS) signál je povolen během sériové komunikace. |
| Site |
Získá nebo nastaví ISite .Component (Zděděno od Component) |
| StopBits |
Získá nebo nastaví standardní počet stopbitů na bajt. |
| WriteBufferSize |
Získá nebo nastaví velikost výstupní vyrovnávací paměti sériového portu. |
| WriteTimeout |
Získá nebo nastaví počet milisekund před vypršením časového limitu nastane, když operace zápisu nedokončí. |
Metody
| Name | Description |
|---|---|
| Close() |
Zavře připojení portu, nastaví IsOpen vlastnost na |
| CreateObjRef(Type) |
Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem. (Zděděno od MarshalByRefObject) |
| DiscardInBuffer() |
Zahodí data ze vyrovnávací paměti příjmu sériového ovladače. |
| DiscardOutBuffer() |
Zahodí data ze vyrovnávací paměti přenosu sériového ovladače. |
| Dispose() |
Uvolní všechny prostředky používané nástrojem Component. (Zděděno od Component) |
| Dispose(Boolean) |
Uvolní nespravované prostředky používané SerialPort a volitelně uvolní spravované prostředky. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetLifetimeService() |
Zastaralé.
Načte objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| GetPortNames() |
Získá pole názvů sériových portů pro aktuální počítač. |
| GetService(Type) |
Vrátí objekt, který představuje službu poskytovanou objektem Component nebo jeho Container. (Zděděno od Component) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| InitializeLifetimeService() |
Zastaralé.
Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci. (Zděděno od MarshalByRefObject) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| MemberwiseClone(Boolean) |
Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu. (Zděděno od MarshalByRefObject) |
| Open() |
Otevře nové připojení sériového portu. |
| Read(Byte[], Int32, Int32) |
Přečte řadu bajtů ze SerialPort vstupní vyrovnávací paměti a zapíše tyto bajty do pole bajtů v zadaném posunu. |
| Read(Char[], Int32, Int32) |
Přečte několik znaků ze SerialPort vstupní vyrovnávací paměti a zapíše je do pole znaků na daném posunu. |
| ReadByte() |
Synchronně čte jeden bajt ze SerialPort vstupní vyrovnávací paměti. |
| ReadChar() |
Synchronně čte jeden znak ze SerialPort vstupní vyrovnávací paměti. |
| ReadExisting() |
Přečte všechny okamžitě dostupné bajty na základě kódování v datovém proudu i vstupní vyrovnávací paměti objektu SerialPort . |
| ReadLine() |
Načte hodnotu NewLine ve vstupní vyrovnávací paměti. |
| ReadTo(String) |
Načte řetězec až do zadané |
| ToString() |
String Vrátí hodnotu obsahující název Component, pokud existuje. Tato metoda by neměla být přepsána. (Zděděno od Component) |
| Write(Byte[], Int32, Int32) |
Zapíše zadaný počet bajtů do sériového portu pomocí dat z vyrovnávací paměti. |
| Write(Char[], Int32, Int32) |
Zapíše zadaný počet znaků do sériového portu pomocí dat z vyrovnávací paměti. |
| Write(String) |
Zapíše zadaný řetězec do sériového portu. |
| WriteLine(String) |
Zapíše zadaný řetězec a NewLine hodnotu do výstupní vyrovnávací paměti. |
Událost
| Name | Description |
|---|---|
| DataReceived |
Označuje, že data byla přijata přes port reprezentovaný objektem SerialPort . |
| Disposed |
Nastane, když komponenta je uvolněna voláním Dispose() metody. (Zděděno od Component) |
| ErrorReceived |
Označuje, že došlo k chybě s portem reprezentovaným objektem SerialPort . |
| PinChanged |
Označuje, že na portu reprezentovaným objektem došlo k události signálu SerialPort , která není datová. |