.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);
                }
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы