UWP FileWatcher 后台任务

Posted

技术标签:

【中文标题】UWP FileWatcher 后台任务【英文标题】:UWP FileWatcher BackgroundTask 【发布时间】:2017-06-21 15:23:51 【问题描述】:

我是新来的,目前正在为我的公司编写 Windows 10 桌面 UWP,它应该通过后台任务检查 txt 文件并更新 UWP 磁贴/UWP 辅助磁贴。

使用 StorageLibraryContentChangedTrigger 检查用户库很简单,而且工作正常。但我的公司表示,用户库不是保存 txt 文件(示例 1)的好主意:

StorageLibrary videosLib = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
StorageLibraryContentChangedTrigger videoTrigger = StorageLibraryContentChangedTrigger.Create(videosLib);

taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskNameFileChanged;
taskBuilder.TaskEntryPoint = taskFileChangedEntryPoint;
taskBuilder.SetTrigger(videoTrigger);
register = taskBuilder.Register();

使用此代码检查应用本地文件夹(示例 2):

List<string> typeFilter = new List<string>();
typeFilter.Add(".txt");
var queryoptions = new Windows.Storage.Search.QueryOptions(Windows.Storage.Search.CommonFileQuery.OrderByName, typeFilter);
var query = ApplicationData.Current.LocalFolder.CreateFileQueryWithOptions(options);

 //subscribe on query's ContentsChanged event
 query.ContentsChanged += Query_ContentsChanged;


 private void Query_ContentsChanged(Windows.Storage.Search.IStorageQueryResultBase sender, object args)
 
     Debug.WriteLine("File has changed!!!!");
 

也可以工作,但前提是 UWP 已打开/处于活动状态。

第一季度: 有没有办法触发ApplicationData.Current.LocalFolder,所以我可以说例如“ApplicationData.Current.LocalFolder.ContentChangedTrigger”?

第二季度: 如果 Q1 是不可能的,我怎么能通过后台任务检查 ApplicationData.Current.LocalFolder 的内容更改?

第三季度: 我知道 UWP 在沙盒中运行,但 UWP 是否可以限制访问 Windows 注册表项?读取权限已经足够了。

提前感谢您的回答:-)

【问题讨论】:

【参考方案1】:

Q1:有没有办法触发 ApplicationData.Current.LocalFolder,所以我可以说例如 “ApplicationData.Current.LocalFolder.ContentChangedTrigger”?

就我而言,没有。但是,使用StorageLibraryContentChangedTrigger,您可以将文本文件放入 Documents 库中,这可能对您的公司更有意义。我会告诉贵公司,目前拥有理想的 UWP 应用是一个梦想。

Q2:如果 Q1 不可能,我还能如何检查 ApplicationData.Current.LocalFolder 用于内容更改 后台任务?

您可以注册一个Timer后台任务,然后在后台每15分钟检查一次文件的最后修改日期。另一种替代方法是使用push notifications 来更新磁贴,而不是使用本地文本文件。

Q3:我知道 UWP 在 Sandbox 中运行,但 UWP 能否拥有 限制对 Windows 注册表项的访问?读取权限已经 够了。

没有。

编辑

您需要Documents 受限功能才能访问“文档”文件夹。要使其适用于开发,请手动将条目添加到 xml Package.manifest 文件中:

<uap:Capability Name="documentsLibrary"/>

要使用此受限功能将应用提交到应用商店,您需要请求提交。

任何人都可以请求访问此功能以进行商店提交。

【讨论】:

非常感谢:-)。我已经认为没有像“ApplicationData.Current.LocalFolder.ContentChangedTrigger”这样的触发器。使用“文档库”,我总是收到“拒绝访问”错误消息。所有其他库都可以完美运行。当我使用 Visual Studio 2017 查看 Package.appxmanifest 文件时,我只能选择库“图片”、“音乐”和“视频”作为功能。如果我没记错的话,“文档库”的访问权限仅限于 Microsoft。 @T.Fischer 我更新了文档库的答案。它不仅是 Microsoft,而且您需要请求访问权限才能提交。

以上是关于UWP FileWatcher 后台任务的主要内容,如果未能解决你的问题,请参考以下文章

UWP:请求启动后台任务时出错

后台任务不在 UWP 中运行

处理来自后台任务的 toast 通知动作触发器 - UWP

UWP:为啥我的后台任务(使用 TimeTrigger)会超出 CPU 配额?

UWP:后台任务中的音频媒体捕获

Uwp 在用户登录时执行后台任务