powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как лучше сделать
2 сообщений из 2, страница 1 из 1
Как лучше сделать
    #38440566
Pavluha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном примере лучше на 2 потока разбить или вынести таймер в основной поток или так оставить?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
var t = new Thread(() =>
                                      {
                                          if (Properties.Settings.Default.IncashPerDayFile)
                                          {
                                              TimeSpan runTime = new TimeSpan(0, 10, 0); // 2 AM
                                              TimeSpan timeToFirstRun = new TimeSpan(0, 0, 0);

                                              

                                              _dailyNodalRunTimer = new System.Threading.Timer(
                                                 Callback,
                                                  null,
                                                  timeToFirstRun,
                                                  TimeSpan.FromHours(24.0)); //repeat event daily
                                              
                                          }
                                          while (true)
                                          {
                                              Execute();
                                              Thread.Sleep(_loopDelay);
                                          }
                                      });
            t.Start();
...
Рейтинг: 0 / 0
Как лучше сделать
    #38440586
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pavluha, кусок с if точно нет смысла запускать в отдельном потоке.

В куске while непонятно почему ты не используешь Timer. Кроме этого плохо что не предусмотрен механизм завершения потока. Хотя бы через простую bool переменную.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
while (true)
{
    Execute();
    if (_exitThread) return;

    Thread.Sleep(_loopDelay);
    if (_exitThread) return;
}



Вместо Thread.Sleep лучше использовать ожидание на waithandle или событиях.

Вообще для задач требущих выполнения раз в сутки лучше использовать Task Scheduler встроенный в Windows. Если все-же нужно чтобы это было частью приложения, то посмотри библиотеку Quartz.NET .

P.S. Вместо new TimeSpan(0, 0, 0) можно использовать TimeSpan.Zero
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как лучше сделать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]