我对 C# 很陌生,仍在尝试了解异步方法的工作原理。我的 UWP 应用需要在将压缩文件夹拖放到屏幕上时从压缩文件夹中检索缩略图 JPG,在文件夹上传时显示带有进度环的缩略图,然后在上传完成时移除进度环。
首先,当用户删除文件时触发此方法:
private async void OnFileDrop(object sender, DragEventArgs e)
{
if (e.DataView.Contains(StandardDataFormats.StorageItems))
{
var items = await e.DataView.GetStorageItemsAsync();
if (items.Count > 0)
{
foreach (var appFile in items.OfType<StorageFile>())
{
StorageFolder downloadFolder = ApplicationData.Current.LocalFolder;
StorageFolder unzipFolder =
await downloadFolder.CreateFolderAsync(Path.GetFileNameWithoutExtension(appFile.Name),
CreationCollisionOption.GenerateUniqueName);
await UnZipFileAsync(appFile, unzipFolder);
}
}
}
下一个:
public static IAsyncAction UnZipFileAsync(StorageFile zipFile, StorageFolder destinationFolder, Action<ZipArchiveEntry, StorageFolder> callback, Action<ZipArchiveEntry> completeCallback)
{
return UnZipFileHelper(zipFile, destinationFolder, thumbnailCallback, completeCallback).AsAsyncAction();
}
然后这个任务解压文件,在 ZipArchive 被创建后调用thumbnailCallback 方法:
private static async Task UnZipFileHelper(StorageFile zipFile, StorageFolder destinationFolder, Action<ZipArchiveEntry, StorageFolder> thumbnailCallback, Action<ZipArchiveEntry> completeCallback)
{
if (zipFile == null || destinationFolder == null ||
!Path.GetExtension(zipFile.Name).Equals(".zip", StringComparison.OrdinalIgnoreCase)
)
{
throw new ArgumentException("Invalid argument...");
}
Stream zipMemoryStream = await zipFile.OpenStreamForReadAsync();
这是应该在上传文件夹时显示缩略图的缩略图回调方法:
现在,只有在首先调用 MessageDialog.ShowAsync() 时才会显示缩略图,并且在单击对话框上的“确定”按钮之前不会显示缩略图。
慕神8447489
相关分类