Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2020, 19:23   #1
Умиджон
Новичок
Джуниор
 
Регистрация: 14.08.2020
Сообщений: 2
По умолчанию Обработка данных по последовательному порту

Здравствуйте...через ком порт приходят данные...С# записывает их в массив и в дальнейшем работает по массиву...Проблема в том что программа правильно читает данные с ком порта и нормально работает...но в следующем запуске программа не читает ком порт...У меня такое впечатление что второй поток который отвечает за приём и обработку данных не запускается иногда и вследствии чего программа после запуска то работает как надо...то не работает...Как я могу сделать так чтобы мои потоки паралельно работали как мне надо? Вот код программы:

Код:
using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                serialPort_Indication.Open();
            }
            catch
            {
                MessageBox.Show("Нет приёма");

            }            
        }

        public void serialPort_Indication_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            if (serialPort_Indication.BytesToRead == 55)
            {
                int length = serialPort_Indication.BytesToRead;
                char[] buffer = new char[length];
                serialPort_Indication.Read(buffer, 0, length);

                new Thread(() =>
                {
                    Invoke((MethodInvoker)(() =>
                    {
                    if ((Convert.ToChar(buffer[0])) == '#' && (Convert.ToChar(buffer[54])) == '$')
                    {
                                switch ((Convert.ToChar(buffer[1])))
                            {
                                case '1': this.pictureBox1.Visible = true; break;
                                case '0': this.pictureBox1.Visible = false; break;
                            }
                                switch ((Convert.ToChar(buffer[2])))
                            {
                                case '1': this.pictureBox2.Visible = true; break;
                                case '0': this.pictureBox2.Visible = false; break;
                            }
                        }


                    }));
                }).Start();
            }
        }

        
    }
}
Умиджон вне форума Ответить с цитированием
Старый 14.08.2020, 19:33   #2
Умиджон
Новичок
Джуниор
 
Регистрация: 14.08.2020
Сообщений: 2
По умолчанию

То есть соединение с ком портом есть но что то не так в процессе записы данных в массив и обработке массива...Эти действия происходят в другом потоке и поэтому подозреваю что при запуске программы второй поток не запускается как надо...Помогите пожалуйста разобраться
Умиджон вне форума Ответить с цитированием
Старый 19.08.2020, 08:38   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Умиджон Посмотреть сообщение
if (serialPort_Indication.BytesToRead == 55)

А что будет если пролетели данные и в буфере оказалось сразу 57 байт и продолжает расти??
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных по последовательному порту из C# в Matlab maxsklad C# (си шарп) 0 22.04.2020 09:24
9 бит данных по COM-порту zvb Win Api 12 21.07.2017 21:52
Прием и передача данных по COM порту PTyTb32 Компоненты Delphi 2 26.06.2015 22:12
Обмен в многопроцессорной системе по последовательному порту VoltZZZ Фриланс 2 06.04.2015 21:45
Как проверить связь по последовательному порту magnuz Компьютерное железо 1 07.08.2012 09:31