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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 20:36   #1
lexluter1988
Пользователь
 
Аватар для lexluter1988
 
Регистрация: 20.04.2010
Сообщений: 47
По умолчанию чтение с COM-порта в отдельном потоке не получается

это метод, который вызывается при нажатии на кнопку


Код:
public void MyThread()
        {
            CommPort port = new CommPort(pN, bR, dB, dP, sB);
            // открываем файл конфигурации, в котором хранится имя проекта
            // над которым мы работаем в данный момент
            StreamReader fileName = new StreamReader("config.txt");

            // присваиваем переменной имя проекта
            fName = fileName.ReadLine();

            // формируем путь к каталогу проекта
            fPath = Path.Combine(fName, fName + "_data" + ".txt");

            // закрываем файл конфигурации, т.к. он больше не требуется
            fileName.Close();

            // открываем файл, хранящий константы калибровочной кривой
            StreamWriter fileData = new StreamWriter(fPath, true);
            // при этом мы записываем байт в конец файла, т.е. на новую строку

            // Создаем объек класса CommPort
            // С настройками, взятыми из файла конфигурации com-порта
            

            // Простенький цикл, записывающий в в файл данных данные
            //   
                for (; ; i++)
                {
                    // если нажали на кнопку Пауза, то запись останавливается
                    if (pause)
                        break;
                    {

                        if (port.Open())
                            {
                                // Если порт открыт, то считываем 2 байта
                                byte[] data = port.Read(2);


                                // Далее формируем символ, как сумму 
                                dataS = data[0] + data[1];
                                // Закрываем порт
                                port.Close();
                            }
                            else
                            {
                                MessageBox.Show("Port not open or exist");
                            }
                        
                    }               
                   
                        // Выводим в текстовое поле количество принятых байт

                        testText.Text = Convert.ToString(i);

                        // теперь записываем строку с данными в файл
                        fileData.WriteLine(i);
                    

                }
                fileData.Close();
            // закрываем файл, чтобы не было разногласий
            }
lexluter1988 вне форума Ответить с цитированием
Старый 25.05.2010, 20:37   #2
lexluter1988
Пользователь
 
Аватар для lexluter1988
 
Регистрация: 20.04.2010
Сообщений: 47
По умолчанию

это обработчик той самой кнопки

Код:
[STAThread]
        private void recButton_Click(object sender, EventArgs e)
        {       
            // разрешаем дальнейший прием даннных
            pause = false;            

            // запрещаем компилятору контролировать потоки
            dataRecord.CheckForIllegalCrossThreadCalls = false;
            // создаем новый поток
            ThreadStart myThreadDelegate = new ThreadStart(MyThread);
            Thread thr = new Thread(myThreadDelegate);
            //вызываем поток
            thr.Start();
  
        }
lexluter1988 вне форума Ответить с цитированием
Старый 25.05.2010, 20:40   #3
lexluter1988
Пользователь
 
Аватар для lexluter1988
 
Регистрация: 20.04.2010
Сообщений: 47
По умолчанию

при запуске программы и нажатии на кнопку ничего не происходит, кроме полного повисания проги. По логике должно появляться сообщение
Код:
MessageBox.Show("Port not open or exist");
но нет. Если убрать работу с портом и просто выводить "i" как там написано в цикле, то все работает. Но добавляешь туда открытие порта и чтение и все виснет
lexluter1988 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод сообщения в отдельном потоке и т.д. Casper-SC Общие вопросы .NET 7 18.05.2010 03:32
всплывающее окно(в отдельном потоке) Virus191288 Компоненты Delphi 8 21.01.2010 13:41
Загрузка данных в отдельном потоке Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 18.01.2010 23:29
Закачка файла происходит в отдельном потоке. Kyran29 Работа с сетью в Delphi 1 28.11.2009 01:19
Запрос к БД в отдельном потоке (Thread) tyrell lab БД в Delphi 1 14.06.2007 08:42