SerialPort.ReadLine Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Lê até ao NewLine valor no buffer de entrada.
public:
System::String ^ ReadLine();
public string ReadLine();
member this.ReadLine : unit -> string
Public Function ReadLine () As String
Devoluções
O conteúdo do buffer de entrada até à primeira ocorrência de um NewLine valor.
Exceções
A porta especificada não está aberta.
A operação não foi concluída antes do término do período de pausa.
-ou-
Não foram lidos bytes.
Exemplos
O exemplo de código seguinte demonstra o uso da SerialPort classe para permitir que dois utilizadores conversem a partir de dois computadores separados ligados por um cabo null modem. Este exemplo de código faz parte de um exemplo de código mais amplo fornecido para a SerialPort classe.
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
Observações
Note-se que, embora este método não devolva o NewLine valor, o NewLine valor é removido do buffer de entrada.
Por defeito, o ReadLine método bloqueia até que uma linha seja recebida. Se este comportamento for indesejável, defina a ReadTimeout propriedade para qualquer valor não nulo para forçar o ReadLine método a lançar a TimeoutException se não houver uma linha disponível na porta.
Se for necessário alternar entre ler texto e ler dados binários do fluxo, selecione um protocolo que defina cuidadosamente a fronteira entre o texto e os dados binários, como ler manualmente bytes e decodificar os dados.
Note
Como a SerialPort classe armazena os dados, e o fluxo contido na BaseStream propriedade não, os dois podem entrar em conflito sobre quantos bytes estão disponíveis para leitura. A BytesToRead propriedade pode indicar que existem bytes para ler, mas esses bytes podem não ser acessíveis ao fluxo contido na BaseStream propriedade porque foram armazenados na SerialPort classe.