Windows 10 IoT Core上的BackgroundDownloader无法在Raspberry Pi上完成

时间:2017-08-02 22:43:01

标签: c# windows uwp raspberry-pi iot

我得到了在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:

设置

  • Raspberry Pi 3
  • Windows 10 IoT核心10.0.15063.0
  • 有线以太网连接
  • 应用程序功能(Package.appxmanifest)
    • 互联网(客户端和服务器)
    • 互联网(客户)
    • 专用网络(客户端和服务器)
    • 可移动存储

1 个答案:

答案 0 :(得分:1)

这种挂起可能是由Async和WPF上下文锁定引起的。尝试使用Task.Wait()代替await。 WPF UI轻松锁定awaits。 我将await SpiDevice.FromIdAsync(devs[0].Id, set)锁定,当我更改为devTask.Wait()时,锁定消失,设备从devTask.Result找到。