我正在尝试做一个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");
如何调试此代码并查看其停止位置?
答案 0 :(得分:1)
如果使用imageID
在“输出”窗口中输出Debug.Writeline
变量:
var imageID = DateTime.Now.Hour.ToString("HH");
Debug.WriteLine(imageID);
您可以看到输出为:HH
。
这样做的原因是格式字符串HH
适用于DateTime
变量,但是实际上您实际上仅在Hour
变量上调用它,它只是一个数字。
有两种可能的解决方案:
.Hour
:var imageID = DateTime.Now.ToString("HH");
Hour
用作数字:var imageID = DateTime.Now.Hour.ToString()
; 这两种解决方案都是等效的,并且会产生24小时制的小时数。