SerialPort.ReadTimeout Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает количество миллисекунда до истечения времени ожидания, когда операция чтения не завершается.
public:
property int ReadTimeout { int get(); void set(int value); };
public int ReadTimeout { get; set; }
[System.ComponentModel.Browsable(true)]
public int ReadTimeout { get; set; }
member this.ReadTimeout : int with get, set
[<System.ComponentModel.Browsable(true)>]
member this.ReadTimeout : int with get, set
Public Property ReadTimeout As Integer
Значение свойства
Число миллисекунда до истечения времени ожидания происходит, когда операция чтения не завершается.
- Атрибуты
Исключения
Порт находится в недопустимом состоянии.
–или–
Не удалось задать состояние базового порта. Например, параметры, передаваемые из этого SerialPort объекта, были недопустимыми.
Значение времени ожидания чтения меньше нуля и не равно InfiniteTimeout.
Примеры
В следующем примере кода показано использование класса, позволяющего SerialPort двум пользователям общаться с двух отдельных компьютеров, подключенных с помощью кабеля модема NULL. В этом примере пользователям предлагается задать параметры порта и имя пользователя перед чатом. Этот пример кода является частью более крупного примера кода, предоставленного 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) { }
}
}
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
Комментарии
Значение времени ожидания чтения изначально было задано в 500 миллисекундах в API связи Win32. Это свойство позволяет задать это значение. Время ожидания можно задать для любого значения, превышающего ноль, или задать значение InfiniteTimeout, в этом случае время ожидания не происходит. InfiniteTimeout — значение по умолчанию.
Note
Пользователи неуправляемой COMMTIMEOUTS структуры могут ожидать, что значение времени ожидания равно нулю, чтобы отключить время ожидания. Чтобы отключить время ожидания со свойством ReadTimeout , необходимо указать InfiniteTimeout.
Это свойство не влияет на BeginRead метод потока, возвращаемого свойством BaseStream .