Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715

BeginInvoke метод для делегирования массива byte

21.03.2023, 10:41. Показов 1700. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует два метода приёма данных
C#
1
2
System.IO.Ports.SerialPort.ReadExisting()
System.IO.Ports.SerialPort.Read(byte[], int, int)
И есть метод выполнения делегата асинхронно такой как

C#
1
BeginInvoke(Delegate, Object[])
Вот такая строка в коде работает нормально

C#
1
2
3
4
public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            BeginInvoke(new SetTextDeleg(si_DataReceived), _serialPort.ReadExisting());
        }
Но мне нужно читать именно байты из массива а не то что они представляют из себя в кодировке.
C#
1
2
3
4
5
6
        public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] data = new byte[4];
            _serialPort.Read(data, 0, 4);
            BeginInvoke(new SetTextDeleg(si_DataReceived), data);
        }
Но при компиляции ругается вот так

Полный код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO.Ports;
namespace WindowsFormsApplication1
{
  
    public partial class Form1 : Form
    {
        string bluhbluhtext;
        public delegate void SetTextDeleg(byte text);
        public SerialPort _serialPort = new SerialPort("COM4",9600,Parity.None,8,StopBits.One);
        public void si_DataReceived(byte data)
        {
            
            label2.Text = String.Format("1 " + bluhbluhtext);
           
            label1.Text = String.Format("Данные {0:d4}", data);
            
        }
        /*public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            BeginInvoke(new SetTextDeleg(si_DataReceived), _serialPort.ReadExisting());
        }*/
 
        public void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] data = new byte[4];
            _serialPort.Read(data, 0, 4);
            BeginInvoke(new SetTextDeleg(si_DataReceived), data);
        }
        public Form1()
        {
            InitializeComponent();
            Application.ApplicationExit += new EventHandler(this.OnApplicationExit); //для события при закрытии программы
            
        }
        private void OnApplicationExit(object sender, EventArgs e)   //Событие при закрытии программы
        {
            _serialPort.DiscardInBuffer();
            _serialPort.DiscardOutBuffer();
            _serialPort.Close(); 
        }
        public void Form1_Load(object sender, EventArgs e)
        {
          
            _serialPort.Handshake = Handshake.None;
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
            _serialPort.Open(); 
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
            bluhbluhtext = textBox1.Text;
        }
 
        private void label2_Click(object sender, EventArgs e)
        {
 
        }
 
    }
}
Как быть?
По сути мне нужно считать из порта 4 байта данных в массив далее этот массив передать в переменную long и эту переменную long вывести в label.
Но так как я не опытный лузер у меня не фига не выходит даже вопрос в яндексе не могу толком сформировать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2023, 10:41
Ответы с готовыми решениями:

Метод делегирования
Народ! Привет, есть проблемка, горит очень =) Возможно ли на обжект паскале сделать следующее: реализовать интерфейс с помощью классов, но...

RijndaelManaged.CreateEncryptor - метод (Byte[], Byte[])
Здравствуйте. Расскажите, пожалуйста, про эти два передаваемых параметра (Key, IV). Вот, на данный момент у меня всё выглядит так: ...

Какому классу принадлежит метод BeginInvoke()
На первый взгляд вопрос может показаться банальным, но вот в чем дело. Создаем любой делегат (какие параметры в методе и что возвращает и...

28
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
21.03.2023, 22:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
в принципе, на скорости 9600
Не имеет значения какую скорость укажешь в инициализации работает на скорости USB порта. Где то может 8-10 Mbit/s.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
21.03.2023, 22:37
Цитата Сообщение от VladimirU Посмотреть сообщение
Не имеет значения какую скорость укажешь
Ты вообще понял про что я говорю? При чем здесь инициализация USB?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
21.03.2023, 22:41
Вот тебе реальный обмен на 115200 с LGT8F328

Первая строка - невычитанные данные с "прошлого" обмена.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
21.03.2023, 22:42
Как посылки рвет наблюдаешь?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
22.03.2023, 11:39  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Как посылки рвет наблюдаешь?
Провёл у себя эксперемент посмотрите вроде не рвёт посылки и видите я скорость меняю но не чего не меняется

https://youtu.be/fiB2lrh7XVk
https://youtu.be/fiB2lrh7XVk

Добавлено через 11 минут
Цитата Сообщение от wizard41 Посмотреть сообщение
Ты вообще понял про что я говорю?
Да понял поэтому не стал акцентировать внимание на количестве пропусков бит инфу.

Добавлено через 3 минуты
Цитата Сообщение от wizard41 Посмотреть сообщение
Как посылки рвет наблюдаешь?
Возможно это не рвёт посылки а сам USART сниффер так опрашивает. Попробуй терминал как у меня на видео.

Добавлено через 45 секунд
wizard41, данные ADC что ли обрабатываете?
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
22.03.2023, 13:06
Цитата Сообщение от VladimirU Посмотреть сообщение
Возможно это не рвёт посылки а сам USART сниффер так опрашивает
VladimirU, в этом деле у меня не бывает "Возможно...". Я всегда четко знаю что и где происходит. Потому и тебе говорю на будущее. Ты свои пакеты куда шлешь? В терминал и все? А зачем ты их туда шлешь? Просто посмотреть?
У меня работает достаточно тяжелая программа, которая в частности их принимает и делает еще параллельно кучу вещей.
И как я уже говорил - на работу буфера приема на ПК может повлиять абсолютно все что угодно. Такие моменты тебе не подвластны, но ты должен их предусмотреть и по максимуму обойти. Сам по себе протокол RS довольно старая технология и всегда подвержена ошибкам.
Наиграешься, потом, может быть, сделаешь выводы сам.

Добавлено через 3 минуты
Цитата Сообщение от VladimirU Посмотреть сообщение
Попробуй терминал как у меня на видео.
Ты всерьез думаешь что я не в курсе про такие штуки?
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
01.04.2023, 13:33  [ТС]
wizard41, привет. У меня небольшой вопрос к тебе как спецу по COM USART.
Понемногу разбираюсь в C# и действительно язык гибкий и пространство емён содержит множество нужных методов и классов. Подскажи если не трудно как можно отследить в программе если из системы COM порт вообще исчез? В моём случаи выдернули кабель из USB порта.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3460 / 2781 / 575
Регистрация: 04.09.2018
Сообщений: 8,743
Записей в блоге: 3
01.04.2023, 14:15
Лучший ответ Сообщение было отмечено VladimirU как решение

Решение

VladimirU,
Здесь это уже обсуждалось.
1
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,715
01.04.2023, 14:50  [ТС]
wizard41, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2023, 14:50

Асинхронный делегат: нельзя вызывать метод BeginInvoke()
Всем привет. Скажите, пожалуйста, почему в управляемом С++ (конкретно .NET 4.5) нельзя вызывать метод BeginInvoke для делегата, а в C# -...

Приём массива байтов с неизвестной размерность через метод Receive(byte[]) из класса Socket
Здравствуйте! Пишу клиент-серверное приложение и столкнулся со следующей задачей. Необходимо получить изображение с сервера на клиент, на...

Перевести строку, содержащую данные массива байт (byte[]) в byte[]
Приветствую. Есть такая строка - "" Как её перевести в массив байт? 1. Допустим, что первый шаг это через рег. выражения...

Добавление элементов из массива byte[] в массив byte[]
Подскажите, пожалуйста, как можно добавить элементы из массива byteb в массив byte a, что бы элементы дописались в конец массива ...

Условие для массива byte
есть массив байт из 10 элементов, как сделать условие, типа: если в первом байте = 60 (hex), то что -то там... private bool...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru