powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Странный рассинхрон.
3 сообщений из 3, страница 1 из 1
Странный рассинхрон.
    #40135349
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я принимаю массив байт в цикле
Код: 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.
 private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    byte data;
    int i = 0;
    int idx = 0;

     BeginInvoke((MethodInvoker)delegate
     {
          while (serial_port.BytesToRead > 0)
          {
                data = (byte)serial_port.ReadByte();

                RichTextBoxReceive.AppendText(data.ToString("X") + " ");
                idx++;

                if (i < RX_BUF_SIZE)
                    uart_rx_buf[i++] = data;
            }
                RichTextBoxReceive.AppendText("\n");
      });

      MessageReceivedEventArgs args = new MessageReceivedEventArgs();
      args.lenth = i;
     args.data = uart_rx_buf;
     OnMessageReceived(args);
}

 private void Form1_MessageReceived(object sender, MessageReceivedEventArgs e)
{
    BeginInvoke((MethodInvoker)delegate
    {
          ParseData(e.data, e.lenth);
          PrintData();
    });
}



я предполагаю что после while (serial_port.BytesToRead > 0) выполнится OnMessageReceived(args);
В действительности это происходит одновременно и я вижу текст вперемешку - RichTextBoxReceive.AppendText(data.ToString("X") + " "); и PrintData(); вместе.

Что я упускаю?
...
Рейтинг: 0 / 0
Странный рассинхрон.
    #40135352
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
я предполагаю что после while (serial_port.BytesToRead > 0) выполнится OnMessageReceived(args);
Почему после? Ты же запускаешь два алгоритма в разных потоках и они работают, как ты и сказал - одновременно

Посмотри, чем отличается Invoke от BeginInvoke
...
Рейтинг: 0 / 0
Странный рассинхрон.
    #40135354
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro
jenya7
я предполагаю что после while (serial_port.BytesToRead > 0) выполнится OnMessageReceived(args);
Почему после? Ты же запускаешь два алгоритма в разных потоках и они работают, как ты и сказал - одновременно

Посмотри, чем отличается Invoke от BeginInvoke

понял. спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Странный рассинхрон.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (10): Анонимы (6), Bing Bot 2 мин., RePredeclared 3 мин., Yandex Bot 7 мин., CerebroSQL 7 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]