取消WebClient DownloadTask Async
Cancel WebClient DownloadTask Async
我有一个用于下载文件的 WebClient。
这是我的代码,其中我有一个 ProgressDialog 和一个要下载的 WebClient:
dialog = new ProgressDialog(mContext);
dialog.SetProgressStyle(Android.App.ProgressDialogStyle.Horizontal);
dialog.SetCancelable(true);
dialog.SetCanceledOnTouchOutside(true);
dialog.Show();// showing a dialog
string url = "myurl";
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
dialog.CancelEvent += (s, e) =>
{
webClient.CancelAsync();
//----------------------- Crashes Here
};
try
{
bytes = await webClient.DownloadDataTaskAsync(url);
}
catch (TaskCanceledException)
{
return;
}
catch (Exception a)
{
return;
}
如何中途取消下载?
webClient.CancelAsync();
抛出异常:
Object reference not set to an instance of an object
当内部异常为空时,问题出在异常处理代码中。要使其正常工作,只需使用“?”
检查内部异常
dialog.CancelEvent += (s, e) =>
{
webClient.CancelAsync();
};
try
{
bytes = await webClient.DownloadDataTaskAsync(url);
}
catch (WebException wex)
{
if (wex.Status == WebExceptionStatus.RequestCanceled)
return;
Toast.MakeText(mContext, wex.Message + "," + wex?.InnerException?.Message, ToastLength.Long).Show();
dialog.Progress = 0;
return;
}
catch (TaskCanceledException)
{
return;
}
catch (Exception a)
{
Toast.MakeText(mContext, a.Message + "," + a?.InnerException?.Message, ToastLength.Long).Show();
dialog.Progress = 0;
return;
}
我有一个用于下载文件的 WebClient。
这是我的代码,其中我有一个 ProgressDialog 和一个要下载的 WebClient:
dialog = new ProgressDialog(mContext);
dialog.SetProgressStyle(Android.App.ProgressDialogStyle.Horizontal);
dialog.SetCancelable(true);
dialog.SetCanceledOnTouchOutside(true);
dialog.Show();// showing a dialog
string url = "myurl";
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
dialog.CancelEvent += (s, e) =>
{
webClient.CancelAsync();
//----------------------- Crashes Here
};
try
{
bytes = await webClient.DownloadDataTaskAsync(url);
}
catch (TaskCanceledException)
{
return;
}
catch (Exception a)
{
return;
}
如何中途取消下载?
webClient.CancelAsync();
抛出异常:
Object reference not set to an instance of an object
当内部异常为空时,问题出在异常处理代码中。要使其正常工作,只需使用“?”
检查内部异常dialog.CancelEvent += (s, e) =>
{
webClient.CancelAsync();
};
try
{
bytes = await webClient.DownloadDataTaskAsync(url);
}
catch (WebException wex)
{
if (wex.Status == WebExceptionStatus.RequestCanceled)
return;
Toast.MakeText(mContext, wex.Message + "," + wex?.InnerException?.Message, ToastLength.Long).Show();
dialog.Progress = 0;
return;
}
catch (TaskCanceledException)
{
return;
}
catch (Exception a)
{
Toast.MakeText(mContext, a.Message + "," + a?.InnerException?.Message, ToastLength.Long).Show();
dialog.Progress = 0;
return;
}