我正在使用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进程,它可以正常工作。请帮我解决这个问题。