Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятки с потоками 
:(
    Опции темы
arkonst
Дата 16.11.2007, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 31.10.2007

Репутация: 1
Всего: 1



Здравствуйте коллеги.

Подскажите пожалуйста, как реализовать вывод на форму информации записанной в регистрах устройства, подключенного к последовательному порту компьютера.

На данный момент я могу при помощи готового кода реализовать чтение только одного регистра и вывод его на форму. При попытке вывести хотя бы два, при запуске приложения возникает ошибка потоков.

Для вывода одного использую этот код:

  #region GUI Объявление делегатов
        public delegate void GUIDelegate(string paramString);
        public delegate void GUIClear();
        public delegate void GUIStatus(string paramString);
  #endregion


        #region Функции делегатов
        public void DoGUIClear()
        {
            if (this.InvokeRequired)
            {
                GUIClear delegateMethod = new GUIClear(this.DoGUIClear);
                this.Invoke(delegateMethod);
            }
            else
               
            this.Indication1.Items.Clear();
            
        }
        public void DoGUIStatus(string paramString)
        {
            if (this.InvokeRequired)
            {
                GUIStatus delegateMethod = new GUIStatus(this.DoGUIStatus);
                this.Invoke(delegateMethod, new object[] { paramString });
            }
            else
                this.lblStatus.Text = paramString;
        }
        public void DoGUIUpdate(string paramString)
        {
            if (this.InvokeRequired)
            {
                GUIDelegate delegateMethod = new   GUIDelegate(this.DoGUIUpdate);
                this.Invoke(delegateMethod, new object[] { paramString });
            }
            else
                
                this.Indication1.Items.Add(paramString);
        }
        #endregion


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

this.Indication2.Items.Add(paramString)
однако нет)) 

Как быть пока не знаю…может кто чем сможет помоч.
Заранее спасибо.

PM MAIL   Вверх
arkonst
Дата 16.11.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 31.10.2007

Репутация: 1
Всего: 1



Забыл еще привести кусок кода...

 #region Poll Function
        private void PollFunction()
        {
            //Обновление GUI:
            DoGUIClear();
            pollCount++;
            //Количество опрашиваемых регистров.
            short[] values = new short[1];
            ushort pollStart;
            ushort pollLength;
            pollStart = 6;
            pollLength = 1;

            //Чтение регистров и перевод в нужный формат:
            try
            {
                while (!mb.SendFc3(1, pollStart, pollLength, ref values)) ;
            }
            catch (Exception err)
            {
                DoGUIStatus("Error in modbus read: " + err.Message);
            }
            int i = 0;
            string itemString;
            //Вывод на форму.
            itemString = values[i].ToString();
            DoGUIUpdate(itemString);
        }
        #endregion


Тут как раз и происходит чтение регистра, а код выше используется для вывода на форму.
PM MAIL   Вверх
CYBERDREAM
Дата 16.11.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



запихни лучше код в соответсвующие теги, читабельнее будет


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
archeg
Дата 16.11.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(CYBERDREAM @  16.11.2007,  11:00 Найти цитируемый пост)
запихни лучше код в соответсвующие теги, читабельнее будет 

и напиши что за
Цитата(arkonst @  16.11.2007,  10:32 Найти цитируемый пост)
 ошибка потоков.

вылетает smile 



--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
arkonst
Дата 16.11.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 31.10.2007

Репутация: 1
Всего: 1



Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Indication2' не из того потока, в котором он был создан.
PM MAIL   Вверх
AnTON_G
Дата 16.11.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



про потоки
там как раз написано как получить доступ из вторичного потока к элементам формы
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.