.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); } } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д