C# 如何在C中使用URI和时间输入创建列表#

C# 如何在C中使用URI和时间输入创建列表#,c#,uwp,C#,Uwp,根据输入时间设置桌面墙纸。如图所示,选择图像后,设置时间并将其添加到列表中。在指定的时间,图像将通过背景任务作为壁纸应用。但我错过了一个重要的步骤。我试图找到一种方法来做以下两件事 我想在文件中创建一个列表,应用程序可以在其中添加图像 URI和显示时间。以及后台任务的阅读方式 它 用户界面可以显示列表中添加的图像,并带有删除其中一个图像的选项 我如何实现我在中提到的内容 您的代码中有一些错误: 您正在应用程序安装目录中创建文件。Windows.ApplicationModel.Package

根据输入时间设置桌面墙纸。如图所示,选择图像后,设置时间并将其添加到列表中。在指定的时间,图像将通过背景任务作为壁纸应用。但我错过了一个重要的步骤。我试图找到一种方法来做以下两件事

  • 我想在文件中创建一个列表,应用程序可以在其中添加图像 URI和显示时间。以及后台任务的阅读方式 它
  • 用户界面可以显示列表中添加的图像,并带有删除其中一个图像的选项
我如何实现我在中提到的内容


您的代码中有一些错误:

  • 您正在应用程序安装目录中创建文件。
    Windows.ApplicationModel.Package.Current.InstalledLocation
    是只读的,不能在其中写入文件。有关更多详细信息,请参阅。您可以将iamges文件保存在中。我相信你已经读过了,但是你误解了文件上的代码。在该文档中,它只是从应用程序安装目录获取映像文件,而不是在其中写入文件。因此,您的代码不正确
  • 注册后台任务的代码不正确。代码和包.appxmanifest中的
    TaskEntryPoint
    应该是“BackgroundTaskComponent.BackgroundClass”。你最好仔细阅读文档,然后开始在应用程序中使用后台任务
  • 然后,让我们回到你最初的问题:

    我想在文件中创建一个列表,应用程序可以在其中添加图像URI和显示时间。以及后台任务读取它的方法

    正如@Rufus L所说,您可以定义一个类来将它们保持在一起。然后,您可以将其保存到保存在
    ApplicationData.LocalFolder
    中的文件中。触发后台任务时,您可以从
    ApplicationData.LocalFolder
    获取它。有一种简单的方法可以保存复杂对象。您可以使用Windows社区工具包的类

    代码如下所示:

     var uri = new Uri("ms-appdata:///local/TimeWallpaper/" + assetsFileName);
     StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);
     UserProfilePersonalizationSettings profileSettings = UserProfilePersonalizationSettings.Current;
     await profileSettings.TrySetWallpaperImageAsync(file);
    

    您的
    if
    条件(即您“检查文件是否不存在”)是否应该使用
    !=空
    比较?查看
    File.AppendLine
    File.ReadLines
    中的文件追加和读取。您还可以考虑创建一个简单的类,该类将图像路径和时间戳存储为属性,使其可序列化,然后通过序列化保存/加载用户的选择。@鲁弗斯谢谢。我错过了那个错误!我正在看你提到的东西。File.AppendLine似乎是一个可能的解决方案。您能否详细介绍一下创建一个类以将URI和时间戳存储为属性的主题?可以将集合“绑定”到Xaml吗?我的意思是创建一个具有两个属性的简单类,以便将它们保存在一起:
    public class BackgroundImage{public string ImageFilePath{get;set;}public DateTime ApplicationTime{get;set;}
    非常感谢您的反馈!这非常有帮助,我确实解决了您提请我注意的有关文件访问权限和后台任务的问题。通过阅读,我在C#中发现了这个潜在的解决方案“ObservableCollection”,它可以用来存储图像URI和时间戳<代码>公共ObservableCollection墙纸=新ObservableCollection()如果我将此作为输入
    (timePicker.Time.Hours,timePicker.Time.Minutes,selectedImage.Source)
    如何将集合保存到一个文件中,以便根据当前时间检索URI?@AsemKhen正如我所说,您可以使用它来保存复杂/大型对象。该文档中有代码示例。UWP中的个性化功能似乎终于可以在我的应用程序中使用了。但是,从一种壁纸切换到另一种壁纸时,感觉淡入淡出效果不起作用!。我该如何解决这个问题?我只能找到遗留桌面的答案applications@AsemKhen当您使用
    TrySetWallpaperImageAsync
    方法更改墙纸时,没有这样的API可以应用淡入淡出效果。
     var uri = new Uri("ms-appdata:///local/TimeWallpaper/" + assetsFileName);
     StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(uri);
     UserProfilePersonalizationSettings profileSettings = UserProfilePersonalizationSettings.Current;
     await profileSettings.TrySetWallpaperImageAsync(file);