Управление множеством таймеров C#

166
19 августа 2018, 20:00

есть программа которая работает как сервер TCP и принимает данные через сокеты.

 // получаем адреса для запуска сокета
            ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 777);
            // создаем сокет
            listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                // связываем сокет с локальной точкой, по которой будем принимать данные
                listenSocket.Bind(ipPoint);
                // начинаем прослушивание
                listenSocket.Listen(10);
                handler = listenSocket.Accept();
                while (true)
                {
                    string[] builder;
                    int bytes = 0; // количество полученных байтов
                    byte[] data = new byte[256]; // буфер для получаемых данных
                    do
                    {
                        bytes = handler.Receive(data);
                        builder = Encoding.UTF8.GetString(data, 0, bytes).Split(' ');
                    }
                    while (handler.Available > 0);

Именно в builder, будут хранится принятые значения.

BeginInvoke(new DelegateRead1(ReadInfo), builder, elem1, textBoxKey1.Text, textBoxKey2.Text, numericUpDownPips.Value, 1);

Это функция которую необходимо запустить.

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

Возможно я непонятно объяснил, попробую на примере:

Время истечения таймера 5 секунд

Получаем 3 значения из builder, на каждое назначаем таймер и запоминаем их.

Ждем следующих значений из builder.......

Прилетело еще 1 значение в builder, создаем новый таймер и его оставляем в ожидание, а прошлые три (если время таймеров не истекло) посылаем в метод где сравниваем первое и последнее полученное значение.

Вопрос только в том, как мне взаимодействовать с таймерами которые уже были запущенны ранее?

Попробую еще проще, как можно отловить все рабочие таймеры созданные динамически в программе?

READ ALSO
Определение цикла for

Определение цикла for

В пространстве имён SystemActivities

194
Связь One-to-Many с отличающимся именем поля и таблицы

Связь One-to-Many с отличающимся именем поля и таблицы

Хочу создать связь: пост может иметь одного автора, у которого может быть множество постов

172
Дизайнер окон WPF

Дизайнер окон WPF

После создания WPF-приложения не отображается дизайнер окон, есть только файл с разметкой xamlКак открыть дизайнер?

215