Freigeben über


SerialPort Klasse

Definition

Stellt eine serielle Portressource dar.

public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
    inherit Component
Public Class SerialPort
Inherits Component
Vererbung

Beispiele

Im folgenden Codebeispiel wird die Verwendung der SerialPort Klasse veranschaulicht, um zwei Benutzern das Chatten von zwei separaten Computern zu ermöglichen, die über ein NULL-Modemkabel verbunden sind. In diesem Beispiel werden die Benutzer vor dem Chatten zur Eingabe der Porteinstellungen und eines Benutzernamens aufgefordert. Beide Computer müssen das Programm ausführen, um die volle Funktionalität dieses Beispiels zu erzielen.

// 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

Hinweise

Verwenden Sie diese Klasse, um eine serielle Portdateiressource zu steuern. Diese Klasse bietet synchrone und ereignisgesteuerte E/A, Zugriff auf Pin- und Unterbrechungszustände sowie Zugriff auf serielle Treibereigenschaften. Darüber hinaus kann die Funktionalität dieser Klasse in ein internes Stream Objekt umschlossen werden, auf das über die BaseStream Eigenschaft zugegriffen werden kann, und an Klassen übergeben werden, die Datenströme umschließen oder verwenden.

Die SerialPort Klasse unterstützt die folgenden Codierungen: ASCIIEncoding, , UTF8Encoding, UnicodeEncoding, UTF32Encodingund jede Codierung, die in mscorlib.dll definiert ist, wobei die Codeseite kleiner als 50000 ist oder die Codeseite 54936 ist. Sie können alternative Codierungen verwenden, aber Sie müssen entweder die ReadByte- oder die Write-Methode anwenden und die Codierung selbst ausführen.

Sie verwenden die GetPortNames Methode, um die gültigen Ports für den aktuellen Computer abzurufen.

Wenn ein SerialPort Objekt während eines Lesevorgangs blockiert wird, wird der Thread nicht abgebrochen. Schließen Sie stattdessen entweder den Basisdatenstrom, oder löschen Sie das SerialPort Objekt.

Konstruktoren

Name Beschreibung
SerialPort()

Initialisiert eine neue Instanz der SerialPort-Klasse.

SerialPort(IContainer)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen IContainer Objekts.

SerialPort(String, Int32, Parity, Int32, StopBits)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen Portnamens, der Baudrate, des Paritätsbits, der Datenbits und des Stoppbits.

SerialPort(String, Int32, Parity, Int32)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen Portnamens, der Baudrate, des Paritätsbits und der Datenbits.

SerialPort(String, Int32, Parity)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen Portnamens, der Baudrate und des Paritätsbits.

SerialPort(String, Int32)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen Portnamens und der Baudrate.

SerialPort(String)

Initialisiert eine neue Instanz der SerialPort Klasse mithilfe des angegebenen Portnamens.

Felder

Name Beschreibung
InfiniteTimeout

Gibt an, dass kein Timeout auftritt.

Eigenschaften

Name Beschreibung
BaseStream

Ruft das zugrunde liegende Stream Objekt für ein SerialPort Objekt ab.

BaudRate

Ruft die serielle Baudrate ab oder legt sie fest.

BreakState

Dient zum Abrufen oder Festlegen des Unterbrechungssignalzustands.

BytesToRead

Ruft die Anzahl der Bytes von Daten im Empfangspuffer ab.

BytesToWrite

Ruft die Anzahl der Bytes von Daten im Sendepuffer ab.

CanRaiseEvents

Ruft einen Wert ab, der angibt, ob die Komponente ein Ereignis auslösen kann.

(Geerbt von Component)
CDHolding

Ruft den Status der Carrier Detect-Leitung für den Port ab.

Container

Ruft das, das IContainer die Component.

(Geerbt von Component)
CtsHolding

Ruft den Status der Zeile "Clear-to-Send" ab.

DataBits

Dient zum Abrufen oder Festlegen der Standardlänge von Datenbits pro Byte.

DesignMode

Ruft einen Wert ab, der angibt, ob sich der Component Entwurfsmodus derzeit befindet.

(Geerbt von Component)
DiscardNull

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob Nullbytes ignoriert werden, wenn zwischen dem Port und dem Empfangspuffer übertragen werden.

DsrHolding

Ruft den Status des Data Set Ready (DSR)-Signals ab.

DtrEnable

Dient zum Abrufen oder Festlegen eines Werts, der das Data Terminal Ready (DTR)-Signal während der seriellen Kommunikation ermöglicht.

Encoding

Ruft die Bytecodierung für die Konvertierung von Text vor und nach der Übertragung ab, oder legt diese fest.

Events

Ruft die Liste der Ereignishandler ab, die an diese Componentangefügt sind.

(Geerbt von Component)
Handshake

Dient zum Abrufen oder Festlegen des Handshaking-Protokolls für die serielle Portübertragung von Daten mithilfe eines Werts von Handshake.

IsOpen

Ruft einen Wert ab, der den geöffneten oder geschlossenen Status des SerialPort Objekts angibt.

NewLine

Dient zum Abrufen oder Festlegen des Werts, der zum Interpretieren des Endes eines Aufrufs der ReadLine() Und WriteLine(String) Methoden verwendet wird.

Parity

Ruft das Paritätsüberprüfungsprotokoll ab oder legt es fest.

ParityReplace

Ruft das Byte ab, das ungültige Bytes in einem Datenstrom ersetzt, wenn ein Paritätsfehler auftritt, oder legt diesen fest.

PortName

Ruft den Port für die Kommunikation ab, einschließlich, aber nicht beschränkt auf alle verfügbaren COM-Ports.

ReadBufferSize

Ruft die Größe des SerialPort Eingabepuffers ab oder legt sie fest.

ReadTimeout

Ruft die Anzahl von Millisekunden ab, bevor ein Timeout auftritt, wenn ein Lesevorgang nicht beendet wird, oder legt diese fest.

ReceivedBytesThreshold

Ruft die Anzahl der Bytes im internen Eingabepuffer ab, bevor ein DataReceived Ereignis eintritt, oder legt diese fest.

RtsEnable

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob das RtS-Signal (Request to Send) während der seriellen Kommunikation aktiviert ist.

Site

Dient zum ISite Abrufen oder Festlegen des Werts des Component.

(Geerbt von Component)
StopBits

Ruft die Standardanzahl der Stopbits pro Byte ab oder legt sie fest.

WriteBufferSize

Ruft die Größe des Ausgabepuffers für den seriellen Port ab, oder legt diese fest.

WriteTimeout

Ruft die Anzahl von Millisekunden ab, bevor ein Timeout auftritt, wenn ein Schreibvorgang nicht beendet wird, oder legt diese fest.

Methoden

Name Beschreibung
Close()

Schließt die Portverbindung, legt die IsOpen Eigenschaft auf falseund verworfen das interne Stream Objekt.

CreateObjRef(Type)

Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird.

(Geerbt von MarshalByRefObject)
DiscardInBuffer()

Verwirft Daten aus dem Empfangspuffer des seriellen Treibers.

DiscardOutBuffer()

Verwirft Daten aus dem Übertragungspuffer des seriellen Treibers.

Dispose()

Veröffentlicht alle ressourcen, die von der Component.

(Geerbt von Component)
Dispose(Boolean)

Gibt die nicht verwalteten Ressourcen frei, die von den SerialPort verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetPortNames()

Ruft ein Array von seriellen Portnamen für den aktuellen Computer ab.

GetService(Type)

Gibt ein Objekt zurück, das einen Dienst darstellt, der von der Component oder dem zugehörigen ContainerDienst bereitgestellt wird.

(Geerbt von Component)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern.

(Geerbt von MarshalByRefObject)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts.

(Geerbt von MarshalByRefObject)
Open()

Öffnet eine neue serielle Anschlussverbindung.

Read(Byte[], Int32, Int32)

Liest eine Anzahl von Bytes aus dem SerialPort Eingabepuffer und schreibt diese Bytes in ein Bytearray im angegebenen Offset.

Read(Char[], Int32, Int32)

Liest eine Reihe von Zeichen aus dem SerialPort Eingabepuffer und schreibt sie in ein Array von Zeichen in einem bestimmten Offset.

ReadByte()

Liest synchron ein Byte aus dem SerialPort Eingabepuffer.

ReadChar()

Liest synchron ein Zeichen aus dem SerialPort Eingabepuffer vor.

ReadExisting()

Liest alle sofort verfügbaren Bytes basierend auf der Codierung sowohl im Datenstrom als auch im Eingabepuffer des SerialPort Objekts.

ReadLine()

Liest bis zum NewLine Wert im Eingabepuffer vor.

ReadTo(String)

Liest eine Zeichenfolge bis zum angegebenen value Im Eingabepuffer.

ToString()

Gibt einen String mit dem Namen des Component, falls vorhanden, zurück. Diese Methode sollte nicht außer Kraft gesetzt werden.

(Geerbt von Component)
Write(Byte[], Int32, Int32)

Schreibt eine angegebene Anzahl von Bytes in den seriellen Port mithilfe von Daten aus einem Puffer.

Write(Char[], Int32, Int32)

Schreibt eine angegebene Anzahl von Zeichen mithilfe von Daten aus einem Puffer in den seriellen Port.

Write(String)

Schreibt die angegebene Zeichenfolge in den seriellen Port.

WriteLine(String)

Schreibt die angegebene Zeichenfolge und den NewLine Wert in den Ausgabepuffer.

Ereignisse

Name Beschreibung
DataReceived

Gibt an, dass Daten über einen Port empfangen wurden, der durch das SerialPort Objekt dargestellt wird.

Disposed

Tritt auf, wenn die Komponente durch einen Aufruf der Dispose() Methode verworfen wird.

(Geerbt von Component)
ErrorReceived

Gibt an, dass ein Fehler mit einem Port aufgetreten ist, der durch ein SerialPort Objekt dargestellt wird.

PinChanged

Gibt an, dass ein Nicht-Datensignalereignis auf dem port aufgetreten ist, der durch das SerialPort Objekt dargestellt wird.

Gilt für: