Например, если я нажму «Начать», второй человек получит сообщение.
Поэтому я использую таймер Чтобы сделать это, проблема в том, что таймер блокирует основной поток, и через 20/30 секунд таймер останавливается сам.
вот мой код:
Код: Выделить всё
Verify_User_Permission();
появится мигающий текст.
Код: Выделить всё
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