Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96

Несколько таймеров не работают совместно

06.06.2015, 14:24. Показов 2518. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня есть несколько таймеров. По таймеру запускаются разные методы.
Если я прописываю только один таймер, то у все срабатывает нормально.
C#
1
MyTimer timer1 = new MyTimer((obj) => time.Invoke((Action)(() => getRealTime())), null, 0, 1000);
как только я добавляю еще один
C#
1
2
MyTimer timer1 = new MyTimer((obj) => time.Invoke((Action)(() => getRealTime())), null, 0, 1000);
            MyTimer timer2 = new MyTimer((obj) => this.Invoke((Action)(() => setDataInsert())), null, 0, 1000);
то методы срабатывают при запуске программы и все.
в чем проблема? помогите, пожалуйста
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2015, 14:24
Ответы с готовыми решениями:

несколько таймеров в программе?
Люди добрые, подскажите пожалуйста! В данный момент в моей программе (кстати, на Windows Mobile) крутятся 5 таймеров. У некоторых из них...

Несколько таймеров и хендлеров
Добрый день, Есть задача - нужно организовать в одной программе несколько таймеров обратного отсчета с прогрессбарами. Т.е....

колонки не работают совместно с наушниками.
Поставил себе Windows 7 x64, поставил драйвера на видео, на звук. Все шло хорошо, но вот когда подключил колонки они не воспроизводят...

14
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.06.2015, 15:37
не совсем понятна суть задачи.
Вы хотите запускать методы через разные промежутки времени?
как если бы:
метод1 - каждые 5 секунд,
метод2 - каждые 7 секунд?

если же так, то зачем второй таймер? можно время замерять только одним,
а для вызовов методов через равные промежутки времени использовать проверки
0
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 15:42  [ТС]
Пытливый Ум, да, я хочу, чтобы методы вызывались через разные промежутки времени.
подскажите как это сделать, пожалуйста?

Добавлено через 2 минуты
Пытливый Ум, и такой вопрос. вот, например, у меня есть метод, который получает время с компьютера, у него таймер каждую секунду. а другой метод считывает данные из БД, он срабатывает каждые 5 минут. и вот, когда срабатывает метод считывания данных из БД, то метод получения времени тормозится, пока работает тот метод
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.06.2015, 16:03
начну с конца.
безусловно более объёмный по ресурсозатратам метод будет тормозить всё вокруг
а скажите, пожалуйста, а зачем Вам узнавать время с компьютера каждую секунду?
0
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 16:23  [ТС]
Пытливый Ум, это часы в приложении
показывают текущую дату и время

Добавлено через 10 минут
Пытливый Ум, а как сделать, чтобы приложение не висло?
0
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.06.2015, 16:50
Лучший ответ Сообщение было отмечено TatyanaYA как решение

Решение

вам придётся почитать про потоки
часы-сделать менее приоритетным, а обращение к БД более
вот пример неприоритетных часов (где-то видел, чуть подправил)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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.Threading;
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        // делегат для манипулирования лейбом  
        public delegate void DelegateForTime(Label label);
 
        // поле типа делегата  
        DelegateForTime DelTime;
 
        // поток  
        Thread t1;
 
        public Form1()
        {
            InitializeComponent(); 
        }
 
        //создание потока при загрузке главной формы
        private void Form1_Load(object sender, EventArgs e)
        {
            t1 = new Thread(LabelTime); // создаем поток  
            t1.IsBackground = true; // задаем фоновый режим  
            t1.Priority = ThreadPriority.Lowest; // указываем свмый низкий приоритет  
 
            DelTime = new DelegateForTime(StartTime);// указываем метод делегату 
            t1.Start(); // стартуем  
        }
 
        // устанавливаем время
        void StartTime(Label label)
        {
            // формат времени будет (чч:мм:сс)
            string s = DateTime.Now.Hour.ToString("00");
            s += " : ";
            s += DateTime.Now.Minute.ToString("00");
 
            s += " : " + DateTime.Now.Second.ToString("00");
            label.Text = s;
        }
 
        //непосредственный вывод времени
        void LabelTime()
        {
            //вечный цикл  
            while (true)
            { Invoke(DelTime, label1); } //запускаем метод с главного потока
        }
 
        //при закрытие формы убиваем поток часов, чтобы не было ошибок
        //прибираем за собой
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        { t1.Abort(); }
    }
}
0
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 16:58  [ТС]
Пытливый Ум, спасибо
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.06.2015, 17:08
Пытливый Ум, как много кода для решения такой простой задачи)))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
using System.Threading;
using System.Threading.Tasks;
 
namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            this.Load += (s, e) => {
                Task.Factory.StartNew(() => {
                    while (true) {
                        label1.Invoke((Action)(() => { label1.Text = DateTime.Now.ToLongTimeString(); }));
                        Thread.Sleep(1000);
                    }
                });
            };
        }
    }
}
2
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 17:22  [ТС]
insite2012, а так можно мне сделать на каждый мой метод?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.06.2015, 17:36
Цитата Сообщение от TatyanaYA Посмотреть сообщение
сделать на каждый мой метод?
В принципе да.
Расскажите подробнее что требуется, я напишу пример.
1
 Аватар для Пытливый Ум
22 / 22 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.06.2015, 17:59
insite2012, самое быстрое решение-самое правильное
Можете придумать оптимальнее, выкладывайте. Будет интересно посмотреть

TatyanaYA, подобным способом создаёте поток для обращения к базе данных. Добавите туда только проверку по времени. Задержку какую-нибудь как в Windows.h Sleep (60000)
0
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 18:06  [ТС]
insite2012, а как подписаться на событие в этом потоке?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.06.2015, 18:15
Цитата Сообщение от TatyanaYA Посмотреть сообщение
как подписаться на событие в этом потоке?
В каком именно?
0
0 / 0 / 1
Регистрация: 27.04.2013
Сообщений: 96
06.06.2015, 18:17  [ТС]
insite2012,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
using System.Threading;
using System.Threading.Tasks;
 
namespace WindowsFormsApplication1 {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            this.Load += (s, e) => {
                Task.Factory.StartNew(() => {
                    while (true) {
                        label1.Invoke((Action)(() => { label1.Text = DateTime.Now.ToLongTimeString(); }));
                        Thread.Sleep(1000);
                    }
                });
            };
        }
    }
}
в этом
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
06.06.2015, 19:26
TatyanaYA, Не понял... В этом потоке вы хотите бросать событие, а снаружи на него подписаться? Точно так же как и всегда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2015, 19:26
Помогаю со студенческими работами здесь

Несколько таймеров
Вот код таймера. <script type='text/javascript'> (function(){ var expire = 1380643200000, countDown = function(){ ...

Несколько таймеров
Доброй ночи всем.Подскажите пожалуйста как создать и запустить несколько таймеров в MFC из Visual Studio 6. Один таймер я могу создавать и...

Несколько таймеров
Добрый вечер. Имеется 2 numericUpDown, 2 label, 2 кнопки. Мне нужно, чтобы по нажатию кнопки отображался обратный отсчет в time_label1,...

Несколько таймеров
Добрый день! не ругайте, я только учусь! Delphi 7 На форумах читал что 2 таймера могут свободно работать, на других, что нет.. и вот...

Не работают совместно две правильные части кода
Сначала был код, который при наведении на меню добавлял цвет рамке элементам списка. Код работал хорошо. Ext.onReady(function() { var...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru