SerialPort Klass

Definition

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 falseoch tar bort det interna Stream objektet.

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 value i indatabufferten.

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.

Gäller för