.NET 4.x Не читает с ComPort - C#
Формулировка задачи:
Добрый день! Помогите, пожалуйста!
Не могу считать с компорта. Затыкается на чтении, хотя терминал показывает, что данные идут.
Причём я его проинициализировал, открыл, а когда начинаю читать, выкидывает в другую часть кода...
...а затем исключение по таймингу...
Подскажите, что сделать?
public byte[] read()
{
byte[] mass = new byte[buf];
Port.Read(mass, 0, buf);
Port.DiscardInBuffer();
return mass;
}[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_SYSCOMMAND:
if (m.WParam == (IntPtr)16)
{
settings s = new settings();
s.ShowDialog();
}
if (m.WParam == (IntPtr)19)
{
about a = new about();
a.ShowDialog();
}
break;
}
base.WndProc(ref m);
}
Может ли это быть из-за виртуального (или какой он там) порта, точнее сом-порта через юсб? Если да, то как его побороть? Как я понял, вылет происходит из-за отсутствия данных в буфере, но почему тогда Terminal видит эти данные?
Решение задачи: «.NET 4.x Не читает с ComPort»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.Threading.Tasks;
namespace ComSample {
class Program {
static void Main(string[] args) {
Console.WriteLine("Enter port name:");
string portName = Console.ReadLine().ToUpper();
ComScanner scanner = new ComScanner(portName, 19200);
while (true) {
Console.WriteLine("Enter your message:");
string outMessage = Console.ReadLine();
scanner.sendData(outMessage);
}
}
}
public class ComScanner {
private SerialPort port;
public ComScanner(string portName, int portBaud) {
port = new SerialPort(portName, portBaud);
try {
if (!port.IsOpen) {
port.Open();
}
}
catch (Exception ex){
Console.WriteLine(ex.Message);
return;
}
Task.Factory.StartNew(() => startListen());
}
public void sendData(string outMessage) {
byte[] outBuffer = Encoding.ASCII.GetBytes(outMessage);
port.Write(outBuffer, 0, outBuffer.Length);
}
private void startListen() {
while (true) {
if (port.BytesToRead != 0) {
byte[] inBuffer = new byte[port.BytesToRead];
port.Read(inBuffer, 0, inBuffer.Length);
string inMessage = Encoding.ASCII.GetString(inBuffer);
Console.WriteLine("Get message: {0}", inMessage);
}
else {
Thread.Sleep(500);
}
}
}
}
}