SerialPort.ReadTimeout Egenskap

Definition

Hämtar eller anger antalet millisekunder innan en timeout inträffar när en läsåtgärd inte slutförs.

public:
 property int ReadTimeout { int get(); void set(int value); };
[System.ComponentModel.Browsable(true)]
public int ReadTimeout { get; set; }
[<System.ComponentModel.Browsable(true)>]
member this.ReadTimeout : int with get, set
Public Property ReadTimeout As Integer

Egenskapsvärde

Antalet millisekunder innan tidsgränsen uppnås när en läsåtgärd inte slutförs.

Attribut

Undantag

Porten är i ett ogiltigt tillstånd.

-eller-

Ett försök att ange tillståndet för den underliggande porten misslyckades. Parametrarna som skickades från det här SerialPort objektet var till exempel ogiltiga.

Tidsgränsvärdet för läsning är mindre än noll och inte lika med InfiniteTimeout.

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. Det här kodexemplet är en del av ett större kodexempel som tillhandahålls SerialPort för klassen.

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) { }
    }
}
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

Kommentarer

Tidsgränsvärdet för läsning angavs ursprungligen till 500 millisekunder i Win32 Communications API. Med den här egenskapen kan du ange det här värdet. Tidsgränsen kan ställas in på valfritt värde som är större än noll eller anges till InfiniteTimeout, i vilket fall ingen timeout inträffar. InfiniteTimeout används som standard.

Note

Användare av den ohanterade COMMTIMEOUTS strukturen kan förvänta sig att ange timeout-värdet till noll för att förhindra tidsgränser. Om du vill utelämna tidsgränser med ReadTimeout egenskapen måste du dock ange InfiniteTimeout.

Den här egenskapen påverkar inte metoden för BeginRead dataströmmen som returneras av BaseStream egenskapen.

Gäller för