C# 等待下载完成Windows phone
我怎么能等到下载操作完成后,才想将状态返回到UI。现在我正在使用Webclient下载这样的图像C# 等待下载完成Windows phone,c#,windows-phone-8,async-await,background-transfer,C#,Windows Phone 8,Async Await,Background Transfer,我怎么能等到下载操作完成后,才想将状态返回到UI。现在我正在使用Webclient下载这样的图像 private async Task SaveCoversAsync(string CoverImageUrl) { WebClient getImageClient = new WebClient(); getImageClient.OpenReadCompleted += new OpenReadCompletedEventHandler(getImageClient_OpenReadComp
private async Task SaveCoversAsync(string CoverImageUrl)
{
WebClient getImageClient = new WebClient();
getImageClient.OpenReadCompleted += new OpenReadCompletedEventHandler(getImageClient_OpenReadCompleted);
getImageClient.OpenReadAsync(new Uri(CoverImageUrl), CoverImageUrl);
}
private async void getImageClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
try
{
var storeFile = IsolatedStorageFile.GetUserStoreForApplication();
string coverpath = string.Concat("filename.png");
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(coverpath, System.IO.FileMode.Create, FileAccess.Write, FileShare.Write, storeFile))
{
byte[] buffer = new byte[1024];
while (e.Result.Read(buffer, 0, buffer.Length) > 0)
{
stream.Write(buffer, 0, buffer.Length);
}
}
}
catch (Exception exe)
{
}
}
问题是我不能使用wait,因为我使用的是OpenReadCompleted事件。如何使用WebClient.DownloadFileAsync转换上述codebloack?或者是否有任何方法等待下载结束并返回状态当您可以使用HttpClient或WebClient异步下载文件时,您应该只对小文件(如页面或提要)执行此操作。这样做需要用户在文件传输所需的时间内保持应用程序的打开状态。这意味着,他不会关闭手机、切换到其他应用程序或做任何会导致操作系统暂停你的应用程序的事情 用户不会满意,您的代码将不得不处理不完整和中断的下载 使用它要好得多。本质上,你告诉操作系统你要下载什么文件,把它放在哪里,如果可能的话,操作系统负责在后台下载,并提供有关传输过程的反馈。操作系统还检查手机或WiFi连接的状态 签入该示例以查看创建新对象然后跟踪其进度的两页应用程序 必要的代码相当简单。创建新对象,设置路径和首选项(例如,是否使用蜂窝),并将其传递给执行:
var transferRequest = new BackgroundTransferRequest(transferUri);
transferRequest.Method = "GET";
transferRequest.DownloadLocation = downloadUri;
if (wifiOnlyCheckbox.IsChecked == false)
{
transferRequest.TransferPreferences = TransferPreferences.AllowCellular;
}
BackgroundTransferService.Add(transferRequest);
要跟踪进度,您需要处理,并且虽然您可以使用HttpClient或WebClient异步下载文件,但您应该只对小文件(例如页面或提要)执行此操作。这样做需要用户在文件传输所需的时间内保持应用程序的打开状态。这意味着,他不会关闭手机、切换到其他应用程序或做任何会导致操作系统暂停你的应用程序的事情 用户不会满意,您的代码将不得不处理不完整和中断的下载 使用它要好得多。本质上,你告诉操作系统你要下载什么文件,把它放在哪里,如果可能的话,操作系统负责在后台下载,并提供有关传输过程的反馈。操作系统还检查手机或WiFi连接的状态 签入该示例以查看创建新对象然后跟踪其进度的两页应用程序 必要的代码相当简单。创建新对象,设置路径和首选项(例如,是否使用蜂窝),并将其传递给执行:
var transferRequest = new BackgroundTransferRequest(transferUri);
transferRequest.Method = "GET";
transferRequest.DownloadLocation = downloadUri;
if (wifiOnlyCheckbox.IsChecked == false)
{
transferRequest.TransferPreferences = TransferPreferences.AllowCellular;
}
BackgroundTransferService.Add(transferRequest);
要跟踪进度,您需要处理,并且虽然您可以使用HttpClient或WebClient异步下载文件,但您应该只对小文件(例如页面或提要)执行此操作。这样做需要用户在文件传输所需的时间内保持应用程序的打开状态。这意味着,他不会关闭手机、切换到其他应用程序或做任何会导致操作系统暂停你的应用程序的事情 用户不会满意,您的代码将不得不处理不完整和中断的下载 使用它要好得多。本质上,你告诉操作系统你要下载什么文件,把它放在哪里,如果可能的话,操作系统负责在后台下载,并提供有关传输过程的反馈。操作系统还检查手机或WiFi连接的状态 签入该示例以查看创建新对象然后跟踪其进度的两页应用程序 必要的代码相当简单。创建新对象,设置路径和首选项(例如,是否使用蜂窝),并将其传递给执行:
var transferRequest = new BackgroundTransferRequest(transferUri);
transferRequest.Method = "GET";
transferRequest.DownloadLocation = downloadUri;
if (wifiOnlyCheckbox.IsChecked == false)
{
transferRequest.TransferPreferences = TransferPreferences.AllowCellular;
}
BackgroundTransferService.Add(transferRequest);
要跟踪进度,您需要处理,并且虽然您可以使用HttpClient或WebClient异步下载文件,但您应该只对小文件(例如页面或提要)执行此操作。这样做需要用户在文件传输所需的时间内保持应用程序的打开状态。这意味着,他不会关闭手机、切换到其他应用程序或做任何会导致操作系统暂停你的应用程序的事情 用户不会满意,您的代码将不得不处理不完整和中断的下载 使用它要好得多。本质上,你告诉操作系统你要下载什么文件,把它放在哪里,如果可能的话,操作系统负责在后台下载,并提供有关传输过程的反馈。操作系统还检查手机或WiFi连接的状态 签入该示例以查看创建新对象然后跟踪其进度的两页应用程序 必要的代码相当简单。创建新对象,设置路径和首选项(例如,是否使用蜂窝),并将其传递给执行:
var transferRequest = new BackgroundTransferRequest(transferUri);
transferRequest.Method = "GET";
transferRequest.DownloadLocation = downloadUri;
if (wifiOnlyCheckbox.IsChecked == false)
{
transferRequest.TransferPreferences = TransferPreferences.AllowCellular;
}
BackgroundTransferService.Add(transferRequest);
要跟踪进度,您需要处理,并使用
HttpClient
而不是WebClient。它本机支持异步/await
。您仍然可以使用WebClient
来实现相同的功能,但是您需要使用TaskCompletionSource
来包装它。请参考此内容,并且此WebClient
在WP8上没有openreadtasksync()
?使用HttpClient
而不是WebClient。它本机支持异步/await
。您仍然可以使用WebClient
来实现相同的功能,但是您需要使用TaskCompletionSource
来包装它。请参考此内容,并且此WebClient
在WP8上没有openreadtasksync()
?使用HttpClient
而不是WebClient。它本机支持异步/await
。您仍然可以使用WebClient
来实现相同的功能,但是您需要使用TaskCompletionSource
来包装它。请参考此内容,并且此WebClient
在WP8上没有openreadtasksync()
?使用HttpClient
而不是WebClient。它本机支持异步/await
。哟