使用Xamarin.iOS中的CreateDownloadTaskAsync进程使用NSUrlSession下载文件

时间:2018-02-06 13:15:29

标签: xamarin xamarin.forms xamarin.ios nsurlsession nsurlsessiondownloadtask

我正在使用Xamarin.Forms开发应用程序并在Xamarin.iOS中遇到问题。使用NSUrlSession下载pdf格式文件并在UI中显示进度。

代码段:

using (var sessionConfig = UIDevice.CurrentDevice.CheckSystemVersion(8, 0)
                ? NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(Identifier)
                : NSUrlSessionConfiguration.BackgroundSessionConfiguration(Identifier))
                {
                    sessionConfig.NetworkServiceType = NSUrlRequestNetworkServiceType.Default;
                    this.session = NSUrlSession.FromConfiguration(sessionConfig, new UrlSessionDelegate(m_selectedEBook), NSOperationQueue.MainQueue);
                }
ThreadPool.QueueUserWorkItem(async(object state) =>
                {
using (var url = NSUrl.FromString(downloadURL.PdfDownloadUrl))
                            {
                                using (var request = NSUrlRequest.FromUrl(url))
                                {
                                    downloadTask = session.CreateDownloadTask(request);
                                    downloadTask.Resume();
                                }
                            }
}

设置委托和委托代码本身的代码(使用以下NSUrlSessionDwonloadDelegate获取下载进度)

public class UrlSessionDelegate : NSUrlSessionDownloadDelegate, INSUrlSessionDelegate, INSUrlSessionTaskDelegate
{
    public UrlSessionDelegate()
    {
    }

    public override void DidFinishDownloading(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, NSUrl location)
    {
                //Code to write progress in UI
    }

    public override void DidWriteData(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, long bytesWritten, long totalBytesWritten, long totalBytesExpectedToWrite)
    {
        //Code to write progress in UI
   }
}

工作正常,但需要单击一次按钮下载三个格式文件,并在单个进度控件中显示所有格式文件下载的进度。

为此,我使用了CreateDownloadTaskAsync进程,如下所示,

await session.CreateDownloadTaskAsync(request, out downloadTask);

注意:更改为CreateDownloadTaskAsync而不是CreateDownloadTask,以便通过单击按钮实现多个文件下载的进度。

以下错误来自Xamarin.iOS,

执行本机代码时获得了SIGSEGV。这通常表明 单声道运行时或其中一个本机库中的致命错误 由您的应用程序使用。

无法加载资源,因为App Transport Security策略要求使用安全连接。

如果删除CreateDownloadTaskAsync进程,它可以正常工作。请帮我解决这个问题。

0 个答案:

没有答案