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