none
отображение данных, полученных из serialPort в TextBox.Text RRS feed

  • Общие обсуждения

  • Задача:

    Язык: С#

    Отображать в TextBox.text данные  в текстовом виде, полученные из serialPort, на подобии терминала.

    Проблема: данные отображаются не корректно - все печатные знаки выводятся без ошибок, а знаки "\r" ,"\n" отображаются в виде квадратиков.

    При просмотре содержимого ( в режиме отладки) TextBox.text содержит знаки "\r""\n" но не отражает их.

    Для передачи данных между потоками использовался delegate.

    Спасибо Алексей

    16 января 2014 г. 8:52

Все ответы

  • Возможно, из последовательного порта читаются однобайтовые коды перевода строки и возврата каретки, а TextBox ожидает Юникод? Как Вы читаете информацию из порта и как передаете ее в TextBox? Приведите кусочек кода.
    16 января 2014 г. 12:02
  • Код :

    из порта принимал так:  string scomPortInput =  serialPort1.ReadLine;

    и так : serialPort1.Read(bInputComPortArr, 0, LenBuff);

                string scomPortInput =Encoding.Default.GetString(bInputComPortArr, 0, LenBuff);

     отображаю:

     private void SetText(string text) // сюда пересылается scomPortInput, отображается в txtBoxTerminal.Text
            {
                if (txtBoxTerminal.InvokeRequired)
                {
                    txtBoxTerminal.Invoke(invoker, text);              
                }
                else
                {
                   txtBoxTerminal.AppendText(text);
                }
            } 

    Пробовал менять виды кодировок в Encoding - результата нет.

    Я полагаю вся проблема - здесь:  txtBoxTerminal.Invoke(invoker, text);  

    Если посмотреть содержимое txtBoxTerminal.Text  в режиме отладчика то все символы есть, например -

    ..Text = "test\r\n",  текст на экране: test и два квадратика, вероятнее всего исключение именно таким образом выводит текст.

    Может быть помогло , если бы была возможность передать строку или массив, лучше массив, из потока в поток, но этого я пока не умею ...

    Спасибо Алексей

    16 января 2014 г. 13:37
  • А если вручную (в тексте программы) задать свойство Text у TextBox-а и включить туда эти символы, они тоже квадратиками отображаются? Вот как-то так:

    txtBoxTerminal.Text = "Hello!\r\nBye!\r\n";

    16 января 2014 г. 15:02
  • В текстовое окно выводятся " системные " сообщения - все в порядке, все ообржается

    код:

    private void SetText(string text) // сюда пересылается scomPortInput, отображается в txtBoxTerminal.Text
            {
                if (txtBoxTerminal.InvokeRequired)
                {
                    txtBoxTerminal.Invoke(invoker, text);      .// это для вывода из потока ком порта        
                }
                else
                {
                   txtBoxTerminal.AppendText(text);      // это сообщения из текущего потока
                }
            } 

    Алексей

    16 января 2014 г. 15:47
    1. Вы не ответили на мой последний вопрос.
    2. Что такое "системные сообщения"?
    3. В методе SetText не вижу ничего подозрительного, конечно, если invoker - это экземпляр делегата, вызывающего этот же метод.
    16 января 2014 г. 19:37
  • txtBoxTerminal.Text = "Hello!\r\nBye!\r\n";

    отображается исправно.

    16 января 2014 г. 19:56