SerialPort Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Vertegenwoordigt een seriële poortresource.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Overname
Voorbeelden
Het volgende codevoorbeeld laat het gebruik van de SerialPort klasse zien, zodat twee gebruikers kunnen chatten vanaf twee afzonderlijke computers die zijn verbonden met een null-modemkabel. In dit voorbeeld worden de gebruikers gevraagd om de poortinstellingen en een gebruikersnaam voordat ze chatten. Beide computers moeten het programma uitvoeren om volledige functionaliteit van dit voorbeeld te bereiken.
// 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
Opmerkingen
Gebruik deze klasse om een bron voor seriële poortbestanden te beheren. Deze klasse biedt synchrone en gebeurtenisgestuurde I/O, toegang tot statussen voor vastmaken en verbreken en toegang tot seriële stuurprogramma-eigenschappen. Daarnaast kan de functionaliteit van deze klasse worden verpakt in een intern Stream object, toegankelijk via de BaseStream eigenschap en worden doorgegeven aan klassen die stromen verpakken of gebruiken.
De SerialPort klasse ondersteunt de volgende coderingen: ASCIIEncoding, UTF8Encoding, UnicodeEncoding, en UTF32Encodingalle coderingen die zijn gedefinieerd in mscorlib.dll waarbij de codepagina kleiner is dan 50000 of de codepagina 54936 is. U kunt alternatieve coderingen gebruiken, maar u moet de ReadByte of Write methode gebruiken en de codering zelf uitvoeren.
U gebruikt de GetPortNames methode om de geldige poorten voor de huidige computer op te halen.
Als een SerialPort object wordt geblokkeerd tijdens een leesbewerking, moet u de thread niet afbreken. Sluit in plaats daarvan de basisstroom of verwijder het SerialPort object.
Constructors
| Name | Description |
|---|---|
| SerialPort() |
Initialiseert een nieuw exemplaar van de SerialPort klasse. |
| SerialPort(IContainer) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van het opgegeven IContainer object. |
| SerialPort(String, Int32, Parity, Int32, StopBits) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van de opgegeven poortnaam, baudrate, pariteitsbit, gegevensbits en stop-bit. |
| SerialPort(String, Int32, Parity, Int32) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van de opgegeven poortnaam, baudrate, pariteitsbit en gegevensbits. |
| SerialPort(String, Int32, Parity) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van de opgegeven poortnaam, baudrate en pariteitsbit. |
| SerialPort(String, Int32) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van de opgegeven poortnaam en baudrate. |
| SerialPort(String) |
Initialiseert een nieuw exemplaar van de SerialPort klasse met behulp van de opgegeven poortnaam. |
Velden
| Name | Description |
|---|---|
| InfiniteTimeout |
Geeft aan dat er geen time-out moet optreden. |
Eigenschappen
| Name | Description |
|---|---|
| BaseStream |
Hiermee haalt u het onderliggende Stream object voor een SerialPort object op. |
| BaudRate |
Hiermee haalt u de seriële baudrate op of stelt u deze in. |
| BreakState |
Hiermee haalt of stelt u de status van het onderbrekingssignaal in. |
| BytesToRead |
Hiermee haalt u het aantal bytes aan gegevens op in de ontvangstbuffer. |
| BytesToWrite |
Hiermee haalt u het aantal bytes aan gegevens op in de verzendbuffer. |
| CanRaiseEvents |
Hiermee wordt een waarde opgehaald die aangeeft of het onderdeel een gebeurtenis kan genereren. (Overgenomen van Component) |
| CDHolding |
Hiermee haalt u de status van de Carrier Detect-regel voor de poort op. |
| Container |
Hiermee haalt u het IContainer bestand op dat de Component. (Overgenomen van Component) |
| CtsHolding |
Hiermee haalt u de status van de regel Clear-to-Send op. |
| DataBits |
Hiermee wordt de standaardlengte van gegevensbits per byte opgehaald of ingesteld. |
| DesignMode |
Hiermee wordt een waarde opgehaald die aangeeft of de Component momenteel in de ontwerpmodus is. (Overgenomen van Component) |
| DiscardNull |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of null-bytes worden genegeerd wanneer deze wordt verzonden tussen de poort en de ontvangstbuffer. |
| DsrHolding |
Hiermee haalt u de status van het DSR-signaal (Data Set Ready) op. |
| DtrEnable |
Hiermee wordt een waarde opgehaald of ingesteld waarmee het DTR-signaal (Data Terminal Ready) tijdens seriële communicatie wordt ingeschakeld. |
| Encoding |
Hiermee wordt de bytecodering opgehaald of ingesteld voor de conversie van tekst vóór en na verzending. |
| Events |
Hiermee haalt u de lijst met gebeurtenis-handlers op die aan dit Componentbestand zijn gekoppeld. (Overgenomen van Component) |
| Handshake |
Hiermee wordt het handshakingprotocol opgehaald of ingesteld voor het verzenden van gegevens via seriële poort met behulp van een waarde van Handshake. |
| IsOpen |
Hiermee wordt een waarde opgehaald die de geopende of gesloten status van het SerialPort object aangeeft. |
| NewLine |
Hiermee wordt de waarde opgehaald of ingesteld die wordt gebruikt om het einde van een aanroep naar de ReadLine() en WriteLine(String) methoden te interpreteren. |
| Parity |
Hiermee wordt het protocol voor pariteitscontrole ophaalt of ingesteld. |
| ParityReplace |
Hiermee wordt de byte opgehaald of ingesteld die ongeldige bytes in een gegevensstroom vervangt wanneer er een pariteitsfout optreedt. |
| PortName |
Hiermee haalt u de poort voor communicatie op, inclusief maar niet beperkt tot alle beschikbare COM-poorten. |
| ReadBufferSize |
Hiermee haalt u de grootte van de invoerbuffer op of stelt u deze SerialPort in. |
| ReadTimeout |
Hiermee wordt het aantal milliseconden opgehaald of ingesteld voordat er een time-out optreedt wanneer een leesbewerking niet is voltooid. |
| ReceivedBytesThreshold |
Hiermee haalt of stelt u het aantal bytes in de interne invoerbuffer op voordat een DataReceived gebeurtenis plaatsvindt. |
| RtsEnable |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of het RTS-signaal (Request to Send) is ingeschakeld tijdens seriële communicatie. |
| Site |
Haalt of stelt de ISite van de Component. (Overgenomen van Component) |
| StopBits |
Hiermee haalt u het standaardaantal stopbits per byte op of stelt u deze in. |
| WriteBufferSize |
Hiermee haalt u de grootte van de uitvoerbuffer van de seriële poort op of stelt u deze in. |
| WriteTimeout |
Hiermee wordt het aantal milliseconden opgehaald of ingesteld voordat er een time-out optreedt wanneer een schrijfbewerking niet is voltooid. |
Methoden
| Name | Description |
|---|---|
| Close() |
Sluit de poortverbinding, stelt de IsOpen eigenschap |
| CreateObjRef(Type) |
Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object. (Overgenomen van MarshalByRefObject) |
| DiscardInBuffer() |
Hiermee worden gegevens verwijderd uit de ontvangstbuffer van het seriële stuurprogramma. |
| DiscardOutBuffer() |
Hiermee worden gegevens verwijderd uit de verzendbuffer van het seriële stuurprogramma. |
| Dispose() |
Alle resources die worden gebruikt door de Component. (Overgenomen van Component) |
| Dispose(Boolean) |
Publiceert de niet-beheerde resources die worden gebruikt door de SerialPort beheerde resources en brengt eventueel de beheerde resources vrij. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetLifetimeService() |
Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd. (Overgenomen van MarshalByRefObject) |
| GetPortNames() |
Hiermee haalt u een matrix met seriële poortnamen op voor de huidige computer. |
| GetService(Type) |
Hiermee wordt een object geretourneerd dat een service vertegenwoordigt die wordt geleverd door of door de Component service Container. (Overgenomen van Component) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| InitializeLifetimeService() |
Hiermee haalt u een levensduurserviceobject op om het levensduurbeleid voor dit exemplaar te beheren. (Overgenomen van MarshalByRefObject) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| MemberwiseClone(Boolean) |
Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object. (Overgenomen van MarshalByRefObject) |
| Open() |
Hiermee opent u een nieuwe seriële poortverbinding. |
| Read(Byte[], Int32, Int32) |
Leest een aantal bytes uit de SerialPort invoerbuffer en schrijft deze bytes naar een bytematrix op de opgegeven offset. |
| Read(Char[], Int32, Int32) |
Leest een aantal tekens uit de SerialPort invoerbuffer en schrijft deze in een matrix met tekens op een bepaalde offset. |
| ReadByte() |
Hiermee wordt één byte gelezen uit de SerialPort invoerbuffer. |
| ReadChar() |
Leest synchroon één teken uit de SerialPort invoerbuffer. |
| ReadExisting() |
Leest alle direct beschikbare bytes, op basis van de codering, in zowel de stroom als de invoerbuffer van het SerialPort object. |
| ReadLine() |
Hiermee wordt de NewLine waarde in de invoerbuffer gelezen. |
| ReadTo(String) |
Hiermee leest u een tekenreeks tot aan de opgegeven |
| ToString() |
Retourneert een String met de naam van de Component, indien van toepassing. Deze methode mag niet worden overschreven. (Overgenomen van Component) |
| Write(Byte[], Int32, Int32) |
Hiermee schrijft u een opgegeven aantal bytes naar de seriële poort met behulp van gegevens uit een buffer. |
| Write(Char[], Int32, Int32) |
Schrijft een opgegeven aantal tekens naar de seriële poort met behulp van gegevens uit een buffer. |
| Write(String) |
Hiermee schrijft u de opgegeven tekenreeks naar de seriële poort. |
| WriteLine(String) |
Hiermee schrijft u de opgegeven tekenreeks en de NewLine waarde naar de uitvoerbuffer. |
gebeurtenis
| Name | Description |
|---|---|
| DataReceived |
Geeft aan dat gegevens zijn ontvangen via een poort die wordt vertegenwoordigd door het SerialPort object. |
| Disposed |
Treedt op wanneer het onderdeel wordt verwijderd door een aanroep naar de Dispose() methode. (Overgenomen van Component) |
| ErrorReceived |
Geeft aan dat er een fout is opgetreden met een poort die wordt vertegenwoordigd door een SerialPort object. |
| PinChanged |
Geeft aan dat er een niet-gegevenssignaalgebeurtenis is opgetreden op de poort die wordt vertegenwoordigd door het SerialPort object. |