.NET 4.x Не читает с ComPort - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Помогите, пожалуйста! Не могу считать с компорта. Затыкается на чтении, хотя терминал показывает, что данные идут.
Листинг программы
  1. public byte[] read()
  2. {
  3. byte[] mass = new byte[buf];
  4. Port.Read(mass, 0, buf);
  5. Port.DiscardInBuffer();
  6. return mass;
  7. }
Причём я его проинициализировал, открыл, а когда начинаю читать, выкидывает в другую часть кода...
Листинг программы
  1. [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
  2. protected override void WndProc(ref Message m)
  3. {
  4. switch (m.Msg)
  5. {
  6. case WM_SYSCOMMAND:
  7. if (m.WParam == (IntPtr)16)
  8. {
  9. settings s = new settings();
  10. s.ShowDialog();
  11. }
  12. if (m.WParam == (IntPtr)19)
  13. {
  14. about a = new about();
  15. a.ShowDialog();
  16. }
  17. break;
  18. }
  19. base.WndProc(ref m);
  20. }
...а затем исключение по таймингу... Подскажите, что сделать?
Может ли это быть из-за виртуального (или какой он там) порта, точнее сом-порта через юсб? Если да, то как его побороть? Как я понял, вылет происходит из-за отсутствия данных в буфере, но почему тогда Terminal видит эти данные?

Решение задачи: «.NET 4.x Не читает с ComPort»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO.Ports;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ComSample {
  10.     class Program {
  11.         static void Main(string[] args) {
  12.             Console.WriteLine("Enter port name:");
  13.             string portName = Console.ReadLine().ToUpper();
  14.             ComScanner scanner = new ComScanner(portName, 19200);
  15.             while (true) {
  16.                 Console.WriteLine("Enter your message:");
  17.                 string outMessage = Console.ReadLine();
  18.                 scanner.sendData(outMessage);
  19.             }
  20.         }
  21.     }
  22.     public class ComScanner {
  23.         private SerialPort port;
  24.  
  25.         public ComScanner(string portName, int portBaud) {
  26.             port = new SerialPort(portName, portBaud);
  27.             try {
  28.                 if (!port.IsOpen) {
  29.                     port.Open();
  30.                 }
  31.             }
  32.             catch (Exception ex){
  33.                 Console.WriteLine(ex.Message);
  34.                 return;
  35.             }
  36.             Task.Factory.StartNew(() => startListen());
  37.         }
  38.  
  39.         public void sendData(string outMessage) {
  40.             byte[] outBuffer = Encoding.ASCII.GetBytes(outMessage);
  41.             port.Write(outBuffer, 0, outBuffer.Length);
  42.         }
  43.  
  44.         private void startListen() {
  45.             while (true) {
  46.                 if (port.BytesToRead != 0) {
  47.                     byte[] inBuffer = new byte[port.BytesToRead];
  48.                     port.Read(inBuffer, 0, inBuffer.Length);
  49.                     string inMessage = Encoding.ASCII.GetString(inBuffer);
  50.                     Console.WriteLine("Get message: {0}", inMessage);
  51.                 }
  52.                 else {
  53.                     Thread.Sleep(500);
  54.                 }
  55.             }
  56.         }
  57.     }
  58. }

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


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

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

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы