无法在UWP App中创建可靠的“监视文件夹”

时间:2017-05-02 09:49:03

标签: c# uwp

public class WatchFolder
{
    public bool ChangesMade { get; set; }

    public WatchFolder()
    {
        ChangesMade = false;
    }

    public async void InitializeFolderWatch()
    {
        var folder = KnownFolders.PicturesLibrary.GetFolderAsync("TestWatchFolder");
        var options = new QueryOptions();
        options.FolderDepth = FolderDepth.Deep;
        var fileQuery = folder.CreateFileQueryWithOptions(options);
        fileQuery.ContentsChanged += OnContentsChangedFolder;
        var files = await fileQuery.GetFilesAsync();           
    }

    private void OnContentsChangedFolder(IStorageQueryResultBase sender, object args)
    {
        ChangesMade = true;
    }
}

我正在尝试使用适用于Windows 10商店应用的监视文件夹。调试上面的代码时一开始工作正常。每次使用Windows文件资源管理器将文件添加到监视文件夹(或删除一个文件夹)时,事件将触发并继续触发。但是,如果我与应用程序的用户界面进行了几秒钟的交互,那么请再试一次,之后就不会启动它。

我尝试在代码隐藏和视图模型中实例化它,结果相同。我也尝试将其转换为静态方法,结果相同。

1 个答案:

答案 0 :(得分:1)

这是因为fileQuery对象超出范围,当您与UWP应用程序交互时,GC正在开始并从内存中删除对象。

尝试将fileQuery对象设置为类中的私有字段,这样它就不会超出范围,直到你不再需要该类。