Search code examples
c#uwpwin-universal-appbackground-taskchange-tracking

UWP StorageLibraryContentChangedTrigger when deleting multiple files


I'm using a BackgroundTask for tracking file and Folder changes on my pictures library. This works well, but when i delete multiple files at once, the BackgroundTask does not trigger.

Here is my BG-Task Registration

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();
}

And this is my simple test 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();
}

And finally my DoWork() Task

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();
}

Did i miss something? When deleting only one file, the BackgroundTask will be triggered successfully, but not when i delete multiple files at once from my PicturesLibrary.

Best Regards


Solution

  • Did i miss something? When deleting only one file, the BackgroundTask will be triggered successfully, but not when i delete multiple files at once from my PicturesLibrary

    The current bahavior is, when deleting multiple files, the change records will be postponed to the one in the next change.

    For example, after deleting two files, we created a new file, the task was triggered and the deleting changes is included in StorageLibraryChange list:

    [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
    

    We have filed this issue and the related team is instigating it.