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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация Программы, организация и обработка данных 
:(
    Опции темы
PashaSem
Дата 1.3.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем Привет!
Как организовать лучше программу.

Суть токова Имеем сточник данных через последовательный порт получаем и отсылаем данные .
Необходимо чтоб определенное количество переменных постоянно обновляло свое значение.
И по изминению их отображались на разных формах.

В данный момент поток просто кидает все на форму. знаю что плохо!
А как по другому?
PM MAIL   Вверх
Sartorius
Дата 1.3.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 На таймер повесить обновление. ИМХО чаще 100 мс смысла делать нет
PM MAIL ICQ   Вверх
Retro
Дата 1.3.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


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

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



Цитата(Sartorius @  1.3.2007,  15:36 Найти цитируемый пост)
На таймер повесить обновление. ИМХО чаще 100 мс смысла делать нет 

Я что-то не понял, проблема с обновлением или с временным хранением данных?
Я так понял что из порта идут данные, некоторые из них подлежат обработке и только после этого их нужно отображать.

Если второе то:
Почему не записывать все в ArrayList? Ему все равно какой тип данных записывается. Потом по мере надобности извлекаешь то, что тебе нужно.
PM MAIL   Вверх
PashaSem
Дата 1.3.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



И стем и сдругим 
Как лучше вытаскивать данные 
По таймеру или потоком , если потоком то по какому событию его запустиь ведь с формой он сязан не будет?

И сохранять  где,   ведь туда будут не одна а несколько форм обращаться!

Если таймером на форму все выводить то не красиво! и форма подвисает!
PM MAIL   Вверх
Retro
Дата 1.3.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


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

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



Цитата(PashaSem @  1.3.2007,  16:22 Найти цитируемый пост)
По таймеру или потоком , если потоком то по какому событию его запустиь ведь с формой он сязан не будет?

И сохранять  где,   ведь туда будут не одна а несколько форм обращаться!

Что-то я недопонимаю. А чем ArrayList не подходит? И вообще порт работает запрос\ответ, либо таймер с определенным периодом запускаешь, либо вручную по надобности формируешь запрос.

Лучше опиши назначение программы поподробнее.

PM MAIL   Вверх
PashaSem
Дата 1.3.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Комуникация осуществляеться через последовательный порт но не на прямую а с помощью компонентов (библиотек).
Есть переменные в девайсе значение которых вытаскиваем и отображем на формах.

Вот я и спрашивал как бы лучше организовать данную передачу
А через  ArrayList не пробовал !

Спасибо!

PM MAIL   Вверх
-Mikle-
Дата 1.3.2007, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Сделай отдельный класс, в котором будет производиться чтение\сохранение данных из порта в отдельном потоке. В нем объяви синхронизированный Hashtable
Код

             System.Collections.Hashtable props = System.Collections.Hashtable.Synchronized(new System.Collections.Hashtable());


В этот хэштэйбл грузи данные с порта, где ключом в нем будет идентификатор параметра (строковое или числовое без разницы).
Далее объяви event, который будешь дергать после каждого обновления Hashtable. Можешь объявить еще пару методов для удобного получения данных с порта, типа 
Код

public object GetProperty(string key)

Все, больше ничего не надо пока что. Это будет инстанс данных, считанных с порта.

А что касается по поводу доступа из любого учачтка кода, то тут два пути, взависимости от того, что тебе нужно для задачи.

1. Единый инстанс. То есть тот, который существует только один экземпляр для всех точек доступа. Это в том случае, когда твой источник данных (последовательный порт) только один. Организуетс сие обычно так:
Код

    public class SerialPortProperties
    {
        private static SerialPortProperties _instance;

        // это свойство всегда будет возвращать только один единственный экземпляр класса
        public static SerialPortProperties Instance
        {
            get
            {
                if (_instance == null)
                    _instance = new SerialPortProperties();
                return _instance;
            }
        }

        private SerialPortProperties()
        {
            // private конструктор класса скрываем от публики для того, чтобы его никто случайно не создал повторно
        }

        // ...........................
        // далее обычные свойства и методы класса
        // ...........................
    }


2. Несколько инстансов, для разного набора данных. Это в случае, если источников данных может быть несколько, например COM1, COM2 и т.д.
Код

    public class SerialPortProperties
    {
        private static Dictionary<string, SerialPortProperties> _pool = new Dictionary<string, SerialPortProperties>();

        // это свойство всегда будет возвращать только один единственный экземпляр класса
        // для одного переданного значения comport
        public static SerialPortProperties GetInstance(string comport)
        {
            if (_pool.ContainsKey(comport))
                return _pool[comport];

            SerialPortProperties instance = new SerialPortProperties(comport);
            _pool.Add(comport, instance);
            return instance;
        }

        private SerialPortProperties(string comPortName)
        {
            // private конструктор класса скрываем от публики для того, чтобы его никто случайно не создал повторно
        }

        // ...........................
        // далее обычные свойства и методы класса
        // ...........................
    }


Если есть еще вопросы по теме, то жду smile

Добавлено @ 21:03 
В первом случае обращаешся так:

SerialPortProperties.Instance.ТвоиМетодыИСвойства(...);

Во втором:

SerialPortProperties.GetInstance("COM1").ТвоиМетодыИСвойства(...);
SerialPortProperties.GetInstance("COM2").ТвоиМетодыИСвойства(...);



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

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


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

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


 




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


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

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