Windows 8 -如何得到嵌套文件夹正确
本文关键字:嵌套 文件夹 何得 Windows | 更新日期: 2023-09-27 18:08:49
我有一个GridView,它绑定到一个对象集合,从磁盘加载图像。
当对象变为可见时,对象被放入堆栈中,图像按顺序从堆栈中加载。
问题是GetFolderAsync()在包含对象的ScrollViewer停止滚动之前不会返回。
代码如下:
public static async Task<StorageFolder> GetFileFolderAsync(String fileUrl)
{
try
{
string filePathRelative = DownloadedFilePaths.GetRelativeFilePathFromUrl(fileUrl);
string[] words = filePathRelative.Split('''');
StorageFolder currentFolder = await DownloadedFilePaths.GetAppDownloadsFolder();
for (int i = 0; (i < words.Length - 1); i++)
{
//this is where it "waits" for the scroll viewer to slow down/stop
currentFolder = await currentFolder.GetFolderAsync(words[i]);
}
return currentFolder;
}
catch (Exception)
{
return null;
}
}
我已经将它定位到包含图像的文件夹所在的行。这是获得嵌套文件夹的正确方法吗?
您可以尝试使用ConfigureAwait(false)
在线程池线程上运行for
循环:
public static async Task<StorageFolder> GetFileFolderAsync(String fileUrl)
{
try
{
string filePathRelative = DownloadedFilePaths.GetRelativeFilePathFromUrl(fileUrl);
string[] words = filePathRelative.Split('''');
// HERE added ConfigureAwait call
StorageFolder currentFolder = await
DownloadedFilePaths.GetAppDownloadsFolder().ConfigureAwait(false);
// Code that follows ConfigureAwait(false) call will (usually) be
// scheduled on a background (non-UI) thread.
for (int i = 0; (i < words.Length - 1); i++)
{
// should no longer be on the UI thread,
// so scrollviewer will no longer block
currentFolder = await currentFolder.GetFolderAsync(words[i]);
}
return currentFolder;
}
catch (Exception)
{
return null;
}
}
注意,在上面的情况下,由于没有在UI上完成的工作,您可以使用ConfigureAwait(false)
。例如,下面的代码不能工作,因为在ConfigureAwait
后面有一个与UI相关的调用:
// HERE added ConfigureAwait call
StorageFolder currentFolder = await
DownloadedFilePaths.GetAppDownloadsFolder().ConfigureAwait(false);
// Can fail because execution is possibly not on UI thread anymore:
myTextBox.Text = currentFolder.Path;
原来我用来确定对象可见性的方法阻塞了UI线程。
我有一个GridView,它绑定到一个对象集合,从磁盘加载图像。
对象在出现时被放入堆栈,图像按顺序从堆栈中加载。
问题是GetFolderAsync()在包含对象的ScrollViewer停止滚动之前不会返回。