C # получает текущее время каждую секунду и выполняет некоторую операцию - PullRequest
0 голосов
/ 23 октября 2018

У меня есть UserControl.При загрузке события этого UserControl я создаю timer с интервалом в 1 сек.В функции Timer_tick я получаю current Date, а затем перебираю LIST, который содержит некоторые другие UserControls.И проверяя, совпадает ли текущая дата с датой, хранящейся в списке, выполните что-тоРаботает хорошо до сих пор.Но как только я получу Current time и сравню его со временем, сохраненным в LIST.ведет себя странно.Нет 1, он никогда не совпадает со временем на панели задач Windows. (Все в порядке, все в порядке).но когда условие выполняется, время, сохраненное в списке, и текущее время совпадают.Он выполняет какую-то функцию, но затем просто продолжает ее выполнять, и даже текущее время изменяется, а условие ложно, но продолжает работать.Что я делаю не так?

Timer timer = new Timer();
private async void TodoListControl_OnLoaded(object sender, RoutedEventArgs e) // UserControl Load
{
timer.Interval = (1000);
timer.Tick += Timer_Tick;
timer.Start();
}  

Timer_tick

private void Timer_Tick(object sender, EventArgs e)
{
 string date = now.ToShortDateString();
 foreach (var item in result)
  {
    if(item.Date.Trim() == date.Trim() && item.Time.Trim() ==   now.ToString("t").Trim())
  {
    ParentWindow.SnackbarNotification.IsActive = false;
    ParentWindow.SnackbarNotification.Message.Content = $"{item.Title} - {item.Date} - {item.Time}";
    ParentWindow.SnackbarNotification.IsActive = true;
  }
  else
  { 
    ParentWindow.SnackbarNotification.IsActive = false;
  }
}   
}

1 Ответ

0 голосов
/ 24 октября 2018

Наконец-то нашли причину.Если текущее время, извлеченное с использованием now.ToString("t"), равно 12:30, и оно соответствует сохраненному времени 12:30, тогда условие истинно и отображается уведомление, но тогда условие if(item.Date.Trim() == date.Trim() && item.Time.Trim() == now.ToString("t").Trim()) никогда не становится ложным.Потому что время, которое я получаю каждую секунду, используя это now.ToString("t"), никогда не обновляется.

Я имею в виду, когда я впервые получил now.ToString("t") при проверке состояния, он всегда остается таким же, как 12:30.это никогда не увеличивается.И причина этого была в том, что now было определено глобально как DateTime now = DateTime.Now;, поэтому не знаю почему, но каждый раз, когда я запускаю now.ToString("t") в локальной области, я получаю то же время, что и при первом запуске.

Итак, я объявил теперь локально в своей функции, и каждую секунду этот DateTime now = DateTime.Now; также запускается до now.ToString("t"), и я получаю самое последнее время

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...