Как сравнить System.Timer с TimePicker в xml UWP? - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать будильник в UWP xml. Поэтому я использую системный таймер и пытаюсь сравнить его с установленным TimePicker. Но я не могу получить значение Timepicker. Подчеркивание красного цвета гласит: «Не удается неявно преобразовать System.Timespan в System.DateTime».

private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        DateTime currentTime = DateTime.Now;
        DateTime userTime = timePicker.SelectedTime.Value; //here is where the error shows
        if (currentTime.Hour == userTime.Hour && currentTime.Minute == userTime.Minute && currentTime.Second == userTime.Second)
        {
            timer.Stop();
            try
            {

            }
            catch(Exception ex)
            {

            }
        }
    }

1 Ответ

1 голос
/ 11 февраля 2020

"Невозможно неявно преобразовать System.Timespan в System.DateTime".

Это исключение из-за того, что тип timePicker.SelectedTime.Value равен Timespan, вы не можете напрямую преобразовать его в DateTime.

Если вы хотите сравнить две данные, вы можете преобразовать Timespan в DateTimeOffset или преобразовать часы, минуты и секунды текущего dateTime в секунды и сравнить его с timepan.

In Кроме того, вам нужно получить значение timePicker.SelectedTime.Value в потоке пользовательского интерфейса, вы можете попробовать следующий код.

private async void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        TimeSpan userTime = timePicker.SelectedTime.Value;
        DateTime currentTime = DateTime.Now;
        //Method one
        if (userTime.TotalSeconds == currentTime.Hour * 3600 + currentTime.Minute * 60 + currentTime.Second)
        {
            timer.Stop();
        }

        //Or
        //DateTimeOffset combinedValue2 = new DateTimeOffset(new DateTime(currentTime.Year, currentTime.Month, currentTime.Day) + this.timePicker.Time);
        //if (currentTime.Hour == combinedValue2.Hour && currentTime.Minute == combinedValue2.Minute && currentTime.Second == combinedValue2.Second)
        //{
              //timer.Stop();
        //}

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