Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';“不要创造可靠的”;“监视文件夹”;在UWP应用程序中_Uwp_C# - Fatal编程技术网

Can';“不要创造可靠的”;“监视文件夹”;在UWP应用程序中

Can';“不要创造可靠的”;“监视文件夹”;在UWP应用程序中,uwp,c#,Uwp,C#,我正在尝试获取一个适用于Windows 10应用商店应用程序的手表文件夹。调试时,上述代码一开始工作正常。每当我使用Windows文件资源管理器将文件添加到监视文件夹(或删除)时,该事件将激发并将继续激发。但如果我与应用程序的UI交互几秒钟,然后再试一次,之后它就不会启动了 我尝试在代码隐藏和视图模型中实例化它,结果是一样的。我还尝试将其转换为静态方法,结果相同。这是因为fileQuery对象超出范围,当您与UWP应用程序交互时,GC正在启动并从内存中删除该对象 尝试将fileQuery对象设置

我正在尝试获取一个适用于Windows 10应用商店应用程序的手表文件夹。调试时,上述代码一开始工作正常。每当我使用Windows文件资源管理器将文件添加到监视文件夹(或删除)时,该事件将激发并将继续激发。但如果我与应用程序的UI交互几秒钟,然后再试一次,之后它就不会启动了


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

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


尝试将fileQuery对象设置为类中的私有字段,这样,在您不再需要该类之前,它不会超出范围。

我认为这是因为
fileQuery
对象超出范围,并且当您与UWP应用程序交互时,GC正在启动并从内存中删除该对象。请尝试将
fileQuery
对象设置为类中的私有字段,这样,在您不再需要该类之前,它不会超出范围。这就解决了问题。如果你愿意的话,把这个作为答案贴出来,我会这样标记的。
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;
    }
}