Необходимо проверять данные каждые 2 секунды, использование таймера заблокировало основной потокC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Необходимо проверять данные каждые 2 секунды, использование таймера заблокировало основной поток

Сообщение Anonymous »

Я пытаюсь использовать таймер для проверки данных из SQL каждые 2 секунды. Я пытаюсь получить текущий статус в своем приложении.
Например, если я нажму «Начать», второй человек получит сообщение.
Поэтому я использую таймер Чтобы сделать это, проблема в том, что таймер блокирует основной поток, и через 20/30 секунд таймер останавливается сам.
вот мой код:

Код: Выделить всё

Verify_User_Permission();
Функция, проверяющая разрешение пользователя. Если у него есть соответствующие разрешения, появится кнопка «Начать ежедневно» и запустится таймер. Если кто-то другой уже нажал на эту кнопку, кнопка появится. будет скрыт, и в раскадровке Daily_Meeting_sb
появится мигающий текст.

Код: Выделить всё

private void Verify_User_Permission()
{
if (timer_daily_meeting != null)
{
timer_daily_meeting.Stop();
}

//Verify the User Permission

if (Daily_days.Contains(DateTime.Now.DayOfWeek.ToString()))
{
if (Daily_Meeting_Summary.Count == 0)
{
foreach (string Division in List_Divisions)
{
List List_Daily_Meeting = Function_Select_SQL.Get_Daily_Meeting("", Division, DateTime.Now);

Daily_Meeting_Summary.Add(Division, (List_Daily_Meeting == null || List_Daily_Meeting[0].End_Time == (DateTime?)null ? "False" : "True"));
}
}

else
{
List List_Daily_Meeting = Function_Select_SQL.Get_Daily_Meeting("", Division_Selected, DateTime.Now);

Daily_Meeting_Summary[Division_Selected] = (List_Daily_Meeting == null || List_Daily_Meeting[0].End_Time == (DateTime?)null ? "False" : "True");
}

if (Daily_Meeting_Summary.Where(x => x.Value == "True").Count() != Daily_Meeting_Summary.Count)
{
InitTimer_Daily_Meeting();
}
}
}
Функция для инициализации таймера

Код: Выделить всё

public void InitTimer_Daily_Meeting()
{
List  List_Admin_Settings = Function_Select_SQL.Get_Admin_Settings("Daily_Days_Setting");

string[] Daily_days = List_Admin_Settings != null && List_Admin_Settings.Count == 1? List_Admin_Settings[0].Setting_First_Value.Split(',') : null;

if (Daily_days.Contains(DateTime.Now.DayOfWeek.ToString()))
{
timer_daily_meeting = new Timer();
timer_daily_meeting.Elapsed += Timer_daily_meeting_Elapsed;
timer_daily_meeting.Interval = 2000; // in miliseconds
timer_daily_meeting.AutoReset = false;
timer_daily_meeting.Start();
}
}
Функция Истекшее таймера

Код: Выделить всё

private void Timer_daily_meeting_Elapsed(object sender, ElapsedEventArgs e)
{
Verify_Timer_Elapsed_Time();
Verify_User_Permission();
}

private void Verify_Timer_Elapsed_Time()
{
timer_daily_meeting.Stop();

List List_Admin_Settings = Function_Select_SQL.Get_Admin_Settings("Daily_Duration");

List List_Daily_Meeting = (Function_Select_SQL.Get_Daily_Meeting("", "", (Datagrid_Selected.Items[0] as Argo_Snowflake).Date_Created));

if (List_Daily_Meeting != null)
{
foreach (Daily_Meeting Daily_Meeting in List_Daily_Meeting)
{
if (Daily_Meeting.End_Time == (DateTime?)null)
{
if (Math.Round(((TimeSpan)(DateTime.Now - Daily_Meeting.Start_Time)).TotalMinutes, 1) >= double.Parse(List_Admin_Settings[0].Setting_First_Value))
{
Daily_Meeting.End_Time = DateTime.Now;
Daily_Meeting.Duration = Math.Round(((TimeSpan)(Daily_Meeting.End_Time - Daily_Meeting.Start_Time)).TotalMinutes, 1);

Function_Update_SQL.Update_Daily_Meeting(Daily_Meeting);

Daily_Meeting_Summary[Daily_Meeting.Division] = "True";
}
}
}
}
Спасибо за помощь.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ain-thread
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»