C#-定期刷新方法



我想在大约5分钟后定期刷新我的UWP-UI。我有一个方法"Page_Loaded",其中来自类的所有信息都被发送到UI元素。所以如果我刷新这个方法,UI也可以,对吧?

代码是这样的:

private async void Page_Loaded(object sender, RoutedEventArgs e)
        {
            RootObject myWeather = await Openweathermap.GetWeather();
            string icon = String.Format("http://openweathermap.org/img/wn/{0}@2x.png", myWeather.weather[0].icon);
            ResultImage.Source = new BitmapImage(new Uri(icon, UriKind.Absolute));
            TempTextBlock.Text = ((int)myWeather.main.temp).ToString() + "°";
            DescriptionTextBlock.Text = myWeather.weather[0].description;
            LocationTextBlock.Text = myWeather.name;
            var articlesList = NewsAPI.GetNews().Result.articles;
            lvNews.ItemsSource = articlesList;
            Welcometxt.Text = MainPage.WelcomeText();
        }

那么,如何在5分钟后刷新此方法,以便它获得新信息并将其发送到UI?

那么,如何在5分钟后刷新此方法,以便它获得新信息并将其发送到UI?

不建议重复调用Page_Loaded方法,建议使用DispatcherTimer,即UI线程中的计时器。

我们可以将Page_Loaded中的代码提取为一个函数。

private DispatcherTimer _timer;
public MainPage()
{
    this.InitializeComponent();
    _timer = new DispatcherTimer();
    _timer.Interval = TimeSpan.FromMinutes(5);
    _timer.Tick += Timer_Tick;
}
private async Task GetData()
{
    RootObject myWeather = await Openweathermap.GetWeather();
    string icon = String.Format("http://openweathermap.org/img/wn/{0}@2x.png", myWeather.weather[0].icon);
    ResultImage.Source = new BitmapImage(new Uri(icon, UriKind.Absolute));
    TempTextBlock.Text = ((int)myWeather.main.temp).ToString() + "°";
    DescriptionTextBlock.Text = myWeather.weather[0].description;
    LocationTextBlock.Text = myWeather.name;
    var articlesList = NewsAPI.GetNews().Result.articles;
    lvNews.ItemsSource = articlesList;
    Welcometxt.Text = MainPage.WelcomeText();
}
private async void Timer_Tick(object sender, object e)
{
    await GetData();
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    await GetData();
    _timer.Start();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    _timer.Stop();
    base.OnNavigatedFrom(e);
}

使用DispatcherTimer.Tick,我们可以定期执行任务,当我们离开页面时,我们可以停止计时器。

最新更新