Sdílet prostřednictvím


SerialPort Třída

Definice

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 falsea odstraní interní Stream objekt.

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é value vstupní vyrovnávací paměti.

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á.

Platí pro