SerialPort Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar en seriell portresurs.
public ref class SerialPort : System::ComponentModel::Component
public class SerialPort : System.ComponentModel.Component
type SerialPort = class
inherit Component
Public Class SerialPort
Inherits Component
- Arv
Exempel
Följande kodexempel visar hur klassen används SerialPort för att tillåta två användare att chatta från två separata datorer som är anslutna med en null-modemkabel. I det här exemplet uppmanas användarna att ange portinställningarna och ett användarnamn innan de chattar. Båda datorerna måste köra programmet för att uppnå fullständig funktionalitet i det här exemplet.
// 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
Kommentarer
Använd den här klassen för att styra en seriell portfilresurs. Den här klassen ger synkron och händelsedriven I/O, åtkomst till pin- och bryttillstånd och åtkomst till egenskaper för seriedrivrutiner. Dessutom kan funktionerna i den här klassen omslutas i ett internt Stream objekt som är tillgängligt via BaseStream egenskapen och skickas till klasser som omsluter eller använder strömmar.
Klassen SerialPort stöder följande kodningar: ASCIIEncoding, UTF8Encoding, UnicodeEncoding, UTF32Encodingoch alla kodningar som definieras i mscorlib.dll där kodsidan är mindre än 50000 eller kodsidan är 54936. Du kan använda alternativa kodningar, men du måste använda ReadByte metoden eller Write och utföra kodningen själv.
Du använder GetPortNames metoden för att hämta giltiga portar för den aktuella datorn.
Om ett SerialPort objekt blockeras under en läsåtgärd ska du inte avbryta tråden. Stäng i stället basströmmen eller ta bort objektet SerialPort .
Konstruktorer
| Name | Description |
|---|---|
| SerialPort() |
Initierar en ny instans av SerialPort klassen. |
| SerialPort(IContainer) |
Initierar en ny instans av SerialPort klassen med det angivna IContainer objektet. |
| SerialPort(String, Int32, Parity, Int32, StopBits) |
Initierar en ny instans av SerialPort klassen med det angivna portnamnet, överföringshastigheten, paritetsbiten, databitarna och stoppbiten. |
| SerialPort(String, Int32, Parity, Int32) |
Initierar en ny instans av SerialPort klassen med det angivna portnamnet, överföringshastigheten, paritetsbiten och databitarna. |
| SerialPort(String, Int32, Parity) |
Initierar en ny instans av SerialPort klassen med det angivna portnamnet, överföringshastigheten och paritetsbiten. |
| SerialPort(String, Int32) |
Initierar en ny instans av SerialPort klassen med det angivna portnamnet och överföringshastigheten. |
| SerialPort(String) |
Initierar en ny instans av SerialPort klassen med det angivna portnamnet. |
Fält
| Name | Description |
|---|---|
| InfiniteTimeout |
Anger att ingen timeout ska inträffa. |
Egenskaper
| Name | Description |
|---|---|
| BaseStream |
Hämtar det underliggande Stream objektet för ett SerialPort objekt. |
| BaudRate |
Hämtar eller anger seriell baud-hastighet. |
| BreakState |
Hämtar eller anger brytsignalens tillstånd. |
| BytesToRead |
Hämtar antalet byte med data i mottagningsbufferten. |
| BytesToWrite |
Hämtar antalet byte med data i sändningsbufferten. |
| CanRaiseEvents |
Hämtar ett värde som anger om komponenten kan generera en händelse. (Ärvd från Component) |
| CDHolding |
Hämtar tillståndet för transportöridentifieringsraden för porten. |
| Container |
Hämtar som IContainer innehåller Component. (Ärvd från Component) |
| CtsHolding |
Hämtar tillståndet för raden Clear-to-Send. |
| DataBits |
Hämtar eller anger standardlängden för databitar per byte. |
| DesignMode |
Hämtar ett värde som anger om det Component för närvarande är i designläge. (Ärvd från Component) |
| DiscardNull |
Hämtar eller anger ett värde som anger om null-byte ignoreras när de skickas mellan porten och mottagningsbufferten. |
| DsrHolding |
Hämtar tillståndet för DSR-signalen (Data Set Ready). |
| DtrEnable |
Hämtar eller anger ett värde som aktiverar DTR-signalen (Data Terminal Ready) under seriell kommunikation. |
| Encoding |
Hämtar eller anger bytekodning för konvertering före och efter överföring av text. |
| Events |
Hämtar listan över händelsehanterare som är kopplade till den här Component. (Ärvd från Component) |
| Handshake |
Hämtar eller anger handskakningsprotokollet för seriell portöverföring av data med hjälp av ett värde från Handshake. |
| IsOpen |
Hämtar ett värde som anger objektets SerialPort öppna eller stängda status. |
| NewLine |
Hämtar eller anger det värde som används för att tolka slutet på ett anrop till ReadLine() metoderna och WriteLine(String) . |
| Parity |
Hämtar eller anger paritetskontrollprotokollet. |
| ParityReplace |
Hämtar eller anger byte som ersätter ogiltiga byte i en dataström när ett paritetsfel inträffar. |
| PortName |
Hämtar eller anger porten för kommunikation, inklusive men inte begränsat till alla tillgängliga COM-portar. |
| ReadBufferSize |
Hämtar eller anger storleken på indatabufferten SerialPort . |
| ReadTimeout |
Hämtar eller anger antalet millisekunder innan en timeout inträffar när en läsåtgärd inte slutförs. |
| ReceivedBytesThreshold |
Hämtar eller anger antalet byte i den interna indatabufferten innan en DataReceived händelse inträffar. |
| RtsEnable |
Hämtar eller anger ett värde som anger om RTS-signalen (Request to Send) är aktiverad under seriell kommunikation. |
| Site |
Hämtar eller ställer in ISite i Component. (Ärvd från Component) |
| StopBits |
Hämtar eller anger standardantalet stoppbitar per byte. |
| WriteBufferSize |
Hämtar eller anger storleken på utdatabufferten för serieporten. |
| WriteTimeout |
Hämtar eller anger antalet millisekunder innan en timeout inträffar när en skrivåtgärd inte slutförs. |
Metoder
| Name | Description |
|---|---|
| Close() |
Stänger portanslutningen, anger IsOpen egenskapen till |
| CreateObjRef(Type) |
Skapar ett objekt som innehåller all relevant information som krävs för att generera en proxy som används för att kommunicera med ett fjärrobjekt. (Ärvd från MarshalByRefObject) |
| DiscardInBuffer() |
Tar bort data från seriedrivrutinens mottagningsbuffert. |
| DiscardOutBuffer() |
Tar bort data från seriedrivrutinens överföringsbuffert. |
| Dispose() |
Släpper alla resurser som används av Component. (Ärvd från Component) |
| Dispose(Boolean) |
Släpper de ohanterade resurser som används av SerialPort och släpper eventuellt de hanterade resurserna. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetLifetimeService() |
Föråldrad.
Hämtar det aktuella livslängdstjänstobjektet som styr livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| GetPortNames() |
Hämtar en matris med seriellt portnamn för den aktuella datorn. |
| GetService(Type) |
Returnerar ett objekt som representerar en tjänst som tillhandahålls av Component eller av dess Container. (Ärvd från Component) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InitializeLifetimeService() |
Föråldrad.
Hämtar ett tjänstobjekt för livslängd för att styra livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| MemberwiseClone(Boolean) |
Skapar en ytlig kopia av det aktuella MarshalByRefObject objektet. (Ärvd från MarshalByRefObject) |
| Open() |
Öppnar en ny seriell portanslutning. |
| Read(Byte[], Int32, Int32) |
Läser ett antal byte från indatabufferten SerialPort och skriver dessa byte till en bytematris vid den angivna förskjutningen. |
| Read(Char[], Int32, Int32) |
Läser ett antal tecken från indatabufferten SerialPort och skriver dem till en matris med tecken vid en given förskjutning. |
| ReadByte() |
Läser synkront en byte från indatabufferten SerialPort . |
| ReadChar() |
Läser synkront ett tecken från indatabufferten SerialPort . |
| ReadExisting() |
Läser alla omedelbart tillgängliga byte, baserat på kodningen, i både dataströmmen och indatabufferten för SerialPort objektet. |
| ReadLine() |
Läser upp till värdet NewLine i indatabufferten. |
| ReadTo(String) |
Läser en sträng upp till angiven |
| ToString() |
Returnerar ett String som innehåller namnet på Component, om det finns. Den här metoden bör inte åsidosättas. (Ärvd från Component) |
| Write(Byte[], Int32, Int32) |
Skriver ett angivet antal byte till serieporten med data från en buffert. |
| Write(Char[], Int32, Int32) |
Skriver ett angivet antal tecken till serieporten med data från en buffert. |
| Write(String) |
Skriver den angivna strängen till serieporten. |
| WriteLine(String) |
Skriver den angivna strängen NewLine och värdet till utdatabufferten. |
Händelser
| Name | Description |
|---|---|
| DataReceived |
Anger att data har tagits emot via en port som representeras av SerialPort objektet. |
| Disposed |
Inträffar när komponenten tas bort av ett anrop till Dispose() metoden. (Ärvd från Component) |
| ErrorReceived |
Anger att ett fel har inträffat med en port som representeras av ett SerialPort objekt. |
| PinChanged |
Anger att en icke-datasignalhändelse har inträffat på porten som representeras av SerialPort objektet. |