删除多个文件时的 UWP StorageLibraryContentChangedTrigger

Posted

技术标签:

【中文标题】删除多个文件时的 UWP StorageLibraryContentChangedTrigger【英文标题】:UWP StorageLibraryContentChangedTrigger when deleting multiple files 【发布时间】:2017-02-25 06:36:41 【问题描述】:

我正在使用 BackgroundTask 来跟踪我的图片库上的文件和文件夹更改。这很好用,但是当我一次删除多个文件时,BackgroundTask 不会触发。

这是我的 BG 任务注册

private async void RegisterTask()

    var result = await BackgroundExecutionManager.RequestAccessAsync();
    var builder = new BackgroundTaskBuilder();

    builder.Name = taskName;
    builder.TaskEntryPoint = taskEntryPoint;

    StorageLibrary picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
        StorageLibraryContentChangedTrigger libraryTrigger = StorageLibraryContentChangedTrigger.Create(picturesLibrary);

    builder.SetTrigger(libraryTrigger);
    builder.Register();

这是我的简单测试 BG-Task

public async void Run(IBackgroundTaskInstance taskInstance)

    var deferral = taskInstance.GetDeferral();

    try
    
        await DoWork();
    
    catch (Exception ex)
    
        System.Diagnostics.Debug.WriteLine("ERROR BG: " + ex.Message.ToString());
    

    deferral.Complete();

最后是我的 DoWork() 任务

private async Task DoWork()

    StorageLibrary picturesLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Pictures);
    StorageLibraryChangeTracker picturesTracker = picturesLibrary.ChangeTracker;
    picturesTracker.Enable();
    StorageLibraryChangeReader changeReader = picturesTracker.GetChangeReader();
    IReadOnlyList<StorageLibraryChange> changes = await changeReader.ReadBatchAsync();

    foreach (StorageLibraryChange change in changes)
    
        // Reading the changes
    

    await changeReader.AcceptChangesAsync();

我错过了什么吗?当只删除一个文件时,BackgroundTask 会成功触发,但当我从图片库中一次删除多个文件时不会触发。

最好的问候

【问题讨论】:

【参考方案1】:

我错过了什么吗?仅删除一个文件时,BackgroundTask 将成功触发,但当我从图片库中一次删除多个文件时不会触发

目前的做法是,删除多个文件时,更改记录会推迟到下一次更改中的那个。

例如,删除两个文件后,我们创建了一个新文件,任务被触发,删除的更改包含在 StorageLibraryChange 列表中:

[2/28/2017 4:52:35 PM] Background LibFileChangeTask Start 
Path: C:\Users\xxxx\Pictures\2.txt
ChangeType: Deleted
Path: C:\Users\xxxx\Pictures\1.txt
ChangeType: Deleted
Path: C:\Users\xxxx\Pictures\New Text Document.txt
ChangeType: Created

我们已提交此问题,相关团队正在煽动。

【讨论】:

感谢您的回复。所以这个问题应该在下一个 Windows 10(移动)版本中得到解决? @andy 不能保证,相应的团队正在处理其他优先级最高的任务,我会关注这个问题并在这里发布更新。感谢您的理解。 好的,我明白了。感谢您的调查! 创作者更新中好像没有解决这个问题,对吗?

以上是关于删除多个文件时的 UWP StorageLibraryContentChangedTrigger的主要内容,如果未能解决你的问题,请参考以下文章

设计时的 UWP 资源字符串 (.resw)

设备关闭 BLE 时的 BluetoothLEAdvertisementWatcher - UWP

创建辅助窗口时的 UWP 自定义构造函数

UWP:有效负载包含两个或多个具有相同目标路径的文件

UWP 将多个文件从资产复制到指定位置

在 UWP 中使用 NAudio 播放多个音频文件