@kyurem_bog

С# как работать с com портом?

Нашел на одном форуме код для работы с com портом. По идее он должен выводить данные при определенном ключе. Но этого не происходит. Говорит мол таких данных нет. Отправляю данные через консоль. Тут не совсем понятно какие данные являются ключом, и что писать в консоль.
Работа с ком портом
private SerialPort port;
        
        public PersonsController(string COM5) {
            this.WorkerReportsProgress = true;
            this.WorkerSupportsCancellation = true;
            port = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);
        }
        protected override void OnDoWork(DoWorkEventArgs e) {
            try {
                port.Open();
                StartListen(e);
            }
            catch (Exception ex) {
                throw ex;
            }
            finally {
                port.Close();
            }
        }
        
        void StartListen(DoWorkEventArgs e) {
            
            this.ReportProgress(0, "Listen started!");
            while (true) {
                if (this.CancellationPending) {
                    this.ReportProgress(0, "Listen stopped!");
                    e.Cancel = true;
                    return;
                }
                if (port.BytesToRead != 0) {
                    string key = port.ReadLine();
                    if (Program.persons.Keys.Contains(key)) {
                        this.ReportProgress(0, Program.persons[key]);
                        
                    }
                    else {
                        this.ReportProgress(0, "Unknown person!");
                        this.ReportProgress(1, DateTime.Now.ToString("HH:mm:ss"));
                        this.ReportProgress(2, key);
                    }
                }
                Thread.Sleep(500);
            }
        }

Это данные
public static Dictionary<string, string> persons = 
            new Dictionary<string, string>();
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
        static void FillPersons() {
            persons.Add("101", "Antony");
            persons.Add("102", "Oleg");
            persons.Add("103", "Katrine");
            persons.Add("104", "Evelina");
        }
    }

5cbabe6f38af8452635532.png
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 1
@CHolfield
строка которую ты ловишь port.ReadLine(), содержит в конце два невидимых тебе байта {0x0d, 0x0a}.
поэтому сделай так:

port.ReadLine().Trim()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы