如何使DateTime和“ SetWallpaperAsync”一起工作?

时间:2018-06-19 14:07:42

标签: c# datetime uwp

我正在尝试做一个UWP app,该UWP根据一天中的时间(作为开始)更改墙纸和锁屏。我在执行此操作时遇到了困难:

我在主页上有“ SetWallpaperAsync”任务(我确信它在移入后台任务之前可以正常工作):

private async Task<bool> SetWallpaperAsync()
{
   bool success = false;
   if (UserProfilePersonalizationSettings.IsSupported())
   {
      var imageID = DateTime.Now.Hour.ToString("HH");
      var uri = new Uri($"ms-appx:///Dynamic/Dynamic-{imageID}.jpg");
      var file = await StorageFile.GetFileFromApplicationUriAsync(uri);
      success = await UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file);
      success = await UserProfilePersonalizationSettings.Current.TrySetLockScreenImageAsync(file);
   }
   return success;
}

但是它只能工作一次然后停止,这使我相信imageID字符串未返回正确的值(该值介于00到23之间,对应于一天中的小时数,格式为24)。 我也尝试将文本块链接到相同的值和不同的格式,但是它没有出现在应用程序主页上。我完全不确定哪里出了问题!

// Time format
var formatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("hour");
DateTime dateToFormat = DateTime.Now;
var mydate = formatter.Format(dateToFormat);
TimeDescriptionTextBlock.Text = mydate.ToString();

// another try with the time
TimeHours.Text = DateTime.Now.ToString("HH:mm:ss");

如何调试此代码并查看其停止位置?

1 个答案:

答案 0 :(得分:1)

如果使用imageID在“输出”窗口中输出Debug.Writeline变量:

var imageID = DateTime.Now.Hour.ToString("HH");
Debug.WriteLine(imageID);

您可以看到输出为:HH。 这样做的原因是格式字符串HH适用于DateTime变量,但是实际上您实际上仅在Hour变量上调用它,它只是一个数字。

有两种可能的解决方案:

  1. 从通话中删除.Hourvar imageID = DateTime.Now.ToString("HH");
  2. 只需将Hour用作数字:var imageID = DateTime.Now.Hour.ToString();

这两种解决方案都是等效的,并且会产生24小时制的小时数。