Auf Englisch lesen

Teilen über


SerialPort Klasse

Definition

Stellt einen seriellen Anschluss (als entsprechende Ressource) dar.

C#
public class SerialPort : System.ComponentModel.Component
Vererbung

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung der SerialPort -Klasse, 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 erreichen.

C#
// 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);
    }
}

Hinweise

Verwenden Sie diese Klasse, um eine Dateiressource für seriellen Port zu steuern. Diese Klasse bietet synchrone und ereignisgesteuerte E/A, Zugriff auf Anheft- 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 alle in mscorlib.dll definierten Codierungen, bei denen die Codepage kleiner als 50000 oder die Codepage 54936 ist. Sie können alternative Codierungen verwenden, aber Sie müssen die ReadByte -Methode oder Write verwenden 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, brechen Sie den Thread nicht ab. Schließen Sie stattdessen entweder den Basisdatenstrom, oder entsorgen Sie das SerialPort Objekt.

Konstruktoren

SerialPort()

Initialisiert eine neue Instanz der SerialPort-Klasse.

SerialPort(IContainer)

Initialisiert eine neue Instanz der SerialPort-Klasse mit dem angegebenen IContainer-Objekt.

SerialPort(String)

Initialisiert eine neue Instanz der SerialPort-Klasse unter Verwendung des angegebenen Anschlussnamens.

SerialPort(String, Int32)

Initialisiert eine neue Instanz der SerialPort-Klasse unter Verwendung des angegebenen Anschlussnamens und der Baudrate.

SerialPort(String, Int32, Parity)

Initialisiert eine neue Instanz der SerialPort-Klasse mit dem angegebenen Anschlussnamen, der Baudrate und dem Paritätsbit.

SerialPort(String, Int32, Parity, Int32)

Initialisiert eine neue Instanz der SerialPort-Klasse mit dem angegebenen Anschlussnamen, der Baudrate, dem Paritätsbit und Datenbits.

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

Initialisiert eine neue Instanz der SerialPort-Klasse mit dem angegebenen Anschlussnamen, der Baudrate, dem Paritätsbit, den Datenbits und Stoppbits.

Felder

InfiniteTimeout

Gibt an, dass kein Timeout erfolgen soll.

Eigenschaften

BaseStream

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

BaudRate

Ruft die serielle Baudrate ab oder legt diese fest.

BreakState

Ruft den Zustand bei einer Signalunterbrechung ab oder legt diesen fest.

BytesToRead

Ruft die Anzahl von Datenbytes im Empfangspuffer ab.

BytesToWrite

Ruft die Anzahl von Datenbytes im Sendepuffer ab.

CanRaiseEvents

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

(Geerbt von Component)
CDHolding

Ruft den Zustand der Zeile für die Erkennung des Trägers für den Anschluss ab.

Container

Ruft die IContainer ab, die in der Component enthalten ist.

(Geerbt von Component)
CtsHolding

Ruft den Zustand der Clear-to-Send-Zeile ab.

DataBits

Ruft die Standardlänge der Datenbits pro Byte ab oder legt diese fest.

DesignMode

Ruft einen Wert ab, der angibt, ob sich Component gegenwärtig im Entwurfsmodus befindet.

(Geerbt von Component)
DiscardNull

Ruft einen Wert ab, der angibt, ob NULL-Bytes bei der Übertragung zwischen dem Anschluss und dem Empfangspuffer ignoriert werden, oder legt diesen fest.

DsrHolding

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

DtrEnable

Ruft einen Wert ab, der das Data Terminal Ready (DTR)-Signal während einer seriellen Kommunikation aktiviert, oder legt diesen fest.

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 dieser Component angefügt sind.

(Geerbt von Component)
Handshake

Ruft das Handshakeprotokoll für die Datenübertragung an seriellen Anschlüssen anhand eines Werts von Handshake ab oder legt dieses fest.

IsOpen

Ruft einen Wert ab, der den offenen oder geschlossenen Status des SerialPort-Objekts angibt.

NewLine

Ruft den Wert ab, mit dem das Ende eines Aufrufs der ReadLine()-Methode und der WriteLine(String)-Methode interpretiert wird, oder legt diesen fest.

Parity

Ruft das Paritätsprüfungsprotokoll ab oder legt dieses fest.

ParityReplace

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

PortName

Ruft den Anschluss für die Kommunikation ab oder legt diesen fest, einschließlich aller verfügbaren COM-Anschlüsse, aber nicht beschränkt auf diese.

ReadBufferSize

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

ReadTimeout

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

ReceivedBytesThreshold

Ruft die Anzahl von Bytes im internen Eingabepuffer ab, bevor ein DataReceived-Ereignis auftritt, oder legt diese fest.

RtsEnable

Ruft einen Wert ab, der angibt, ob das Request to Send (RTS)-Signal während der seriellen Kommunikation aktiviert ist, oder legt diesen fest.

Site

Ruft den ISite von Component ab oder legt ihn fest.

(Geerbt von Component)
StopBits

Ruft die Standardanzahl von Stoppbits pro Byte ab oder legt diese fest.

WriteBufferSize

Ruft die Größe des Ausgabepuffers des seriellen Anschlusses ab oder legt diese fest.

WriteTimeout

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

Methoden

Close()

Schließt die Anschlussverbindung, legt die IsOpen-Eigenschaft auf false fest und löscht das interne Stream-Objekt.

CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
DiscardInBuffer()

Verwirft Daten aus dem Empfangspuffer des seriellen Treibers.

DiscardOutBuffer()

Verwirft Daten aus dem Übertragungspuffer des seriellen Treibers.

Dispose()

Gibt alle vom Component verwendeten Ressourcen frei.

(Geerbt von Component)
Dispose(Boolean)

Gibt die von SerialPort verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetLifetimeService()
Veraltet.

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

(Geerbt von MarshalByRefObject)
GetPortNames()

Ruft ein Array der seriellen Anschlussnamen für den aktuellen Computer ab.

GetService(Type)

Gibt ein Objekt zurück, das einen von der Component oder von deren Container bereitgestellten Dienst darstellt.

(Geerbt von Component)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
MemberwiseClone()

Erstellt eine flache Kopie des 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 am angegebenen Offset in ein Bytearray.

Read(Char[], Int32, Int32)

Liest eine Anzahl von Zeichen aus dem SerialPort-Eingabepuffer und schreibt diese am angegebenen Offset in ein Zeichenarray.

ReadByte()

Liest synchron ein Byte aus dem SerialPort-Eingabepuffer.

ReadChar()

Liest synchron ein Zeichen aus dem SerialPort-Eingabepuffer.

ReadExisting()

Liest alle sofort verfügbaren Bytes auf Grundlage der Codierung sowohl im Stream als auch im Eingabepuffer des SerialPort-Objekts.

ReadLine()

Liest bis zum NewLine-Wert im Eingabepuffer.

ReadTo(String)

Liest eine Zeichenfolge bis zum angegebenen value im Eingabepuffer.

ToString()

Gibt einen String zurück, der den Namen der Component enthält (sofern vorhanden). Diese Methode darf nicht überschrieben werden.

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

Schreibt eine angegebene Anzahl von Bytes unter Verwendung von Daten aus einem Puffer in den seriellen Anschluss.

Write(Char[], Int32, Int32)

Schreibt eine angegebene Anzahl von Zeichen unter Verwendung von Daten aus einem Puffer in den seriellen Anschluss.

Write(String)

Schreibt die angegebene Zeichenfolge in den seriellen Anschluss.

WriteLine(String)

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

Ereignisse

DataReceived

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

Disposed

Tritt auf, wenn die Komponente von einem Aufruf der Dispose()-Methode verworfen wird.

(Geerbt von Component)
ErrorReceived

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

PinChanged

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

Gilt für:

Produkt Versionen
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1