SerialPort Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 |
| 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 |
| 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. |