亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步方法僅在調用 MessageDialog 時有效

異步方法僅在調用 MessageDialog 時有效

C#
海綿寶寶撒 2021-06-23 17:18:26
我對 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() 時才會顯示縮略圖,并且在單擊對話框上的“確定”按鈕之前不會顯示縮略圖。
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

thumbnailCallback被稱為沒有await。這就是不顯示縮略圖的原因(如果幸運的話,您可能會隨機獲得縮略圖:))。當您放置 MessageDialog 時,線程有足夠的時間在用戶交互后執行。

怎么修

像下面這樣調用它:

await thumbnailCallback(thumbnail, destinationFolder);

建議 :

將簽名更改為

public async Task thumbnailCallback(ZipArchiveEntry thumbnail, StorageFolder destinationFolder)

通常,您會想要返回一個Task. 主要的例外應該是當您需要一個 void 返回類型(對于事件)。

async返回 void 的方法在另一方面是特殊的:它們代表頂級async操作,并且在您的任務返回exception.


查看完整回答
反對 回復 2021-06-26
  • 1 回答
  • 0 關注
  • 149 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號