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文件资源管理器将文件添加到监视文件夹(或删除一个文件夹)时,事件将触发并继续触发。但是,如果我与uwp应用程序的用户界面进行了几秒钟的交互,那么请再试一次,之后就不会启动它。
我尝试在代码隐藏和视图模型中实例化它,结果相同。我也尝试将其转换为静态方法,结果相同。
答案 0 :(得分:1)
这是因为fileQuery
对象超出范围,当您与UWP应用程序交互时,GC正在开始并从内存中删除对象。
尝试将fileQuery对象设置为类中的私有字段,这样它就不会超出范围,直到你不再需要该类。