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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2015, 13:47   #1
Принтер
Новичок
Джуниор
 
Регистрация: 20.12.2015
Сообщений: 1
По умолчанию Зависает форма при закрытии порта

Помогите, пожалуйста. Пытаюсь написать терминал, который читает данные из порта и выводит в Richtextbox. Написал вот так, на форме ричтекст и две кнопки, все работает, но до тех пор, пока я не закрываю порт. Я если правильно понимаю, то это из-за того, что я не завершил поток. Или я не прав?
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
 
namespace Тест
{
    public partial class Form1 : Form
    {
        string str2;
        public void RICH()// ВЫВОД В RICHTEXTBOX ДАННЫХ С ПОРТА
        {
            richTextBox1.AppendText(str2.ToString());
        }
        delegate void RICH_delegate();
        private void Rbox()
        {
            if (InvokeRequired)
               Invoke(new RICH_delegate(RICH));
            else
                RICH();
        }
        public Form1()
        {
            InitializeComponent();
        }
        public void Show() 
        {
            
                    int t = serialPort1.BytesToRead;
 
                    for (int i = 1; i <= t; i++)
                    {
                        int port_read = serialPort1.ReadByte();
                        char str = (char)port_read;
                        str2 = str.ToString();
                        Rbox();
                    }
                   
 
        }
 
        private void btn_OPEN_Click(object sender, EventArgs e)
        {
            serialPort1.Open();//ОТКРЫВАЕМ ПОРТ
        }
 
        private void btn_CLOSE_Click(object sender, EventArgs e)
        {
                      
            serialPort1.Close(); // ЗАКРЫТЬ ПОРТ    
        }
 
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Show();
        }
 
    }
    }
Принтер вне форума Ответить с цитированием
Старый 24.12.2015, 15:15   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Я бы рекомендовал считывать таким способом:


Код:
bool Busy = false; где нибудь определить свойство


List<byte> AllData = new List<byte>();
Busy = true;
            while (serialPort1.BytesToRead != 0)
            {

                byte[] data = new byte[serialPort1.BytesToRead];
                serialPort1.Read(data, 0, data.Length);
                AllData.AddRange(AllData);
            }
Busy = false;
Busy проверять при закрытии порта. То есть можно закрыть только если он ложь.
И неплохо бы привести сообщение об ошибке. А то неясно что вам советовать.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.

Последний раз редактировалось WorldMaster; 24.12.2015 в 15:18.
WorldMaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# WPF Зависает форма при использовании awesomium (замена webbrowser) Senk WPF, UWP, WinRT, XAML 8 17.10.2013 18:44
Форма зависает AcTiV Общие вопросы .NET 2 17.09.2013 17:42
Зависает VBA при обращении к Google Maps при расчете расстояний AlexTrasko Microsoft Office Excel 1 30.07.2013 10:49
Скрытие панелей инструментов при открытии и отображение при закрытии документа Василий. Microsoft Office Word 0 23.10.2010 00:41
При выполнении кода форма зависает. Как вывести прогрессбар? plato Общие вопросы Delphi 4 06.01.2010 15:37