我得到了在Windows 10 IoT Core上运行的下载程序代码,该代码尝试将文件下载到应用程序本地文件夹(如果它尚不存在)。如果是,则应返回该文件的路径。
Spoiler :代码段本身正在运行,请参阅下文。
private async Task<string> GetAsync(string url)
{
url = WebUtility.UrlDecode(url);
string fileName = Path.GetFileName(url);
var folder = ApplicationData.Current.LocalFolder;
var destinationFile = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists);
if (new FileInfo(destinationFile.Path).Length > 0)
return destinationFile.Path;
var downloader = new BackgroundDownloader();
var download = downloader.CreateDownload(new Uri(url), destinationFile);
await download.StartAsync();
return destinationFile.Path;
}
现在,当文件不存在时,代码将一直运行到行await download.StartAsync()
。从那里,它永远不会回来。
在文件夹中,存在一个具有给定名称的空文件,但只有0kb大小 - 之前调用CreateFileAsync()
时隐式创建了一个(这就是我检查{{1}的原因)检查文件是否存在)。
现在来了: 该代码永远不会返回,但如果我终止该应用程序(经过足够的时间),该文件将被写入磁盘,因此下载显然已成功,但它没有&#34; flush&#34;到文件系统。如果我不杀死应用程序,则不会发生这种情况,因此刷新Windows资源管理器视图或查找文件属性不会显示任何大小的变化。
我对此感到疯狂,有人可以给我一个暗示吗?这些文章中的所有提示和提示都不适用于Pi:
设置
答案 0 :(得分:1)
这种挂起可能是由Async和WPF上下文锁定引起的。尝试使用Task.Wait()
代替await
。 WPF UI轻松锁定awaits
。
我将await SpiDevice.FromIdAsync(devs[0].Id, set)
锁定,当我更改为devTask.Wait()
时,锁定消失,设备从devTask.Result
找到。