C# 取消WebClient下载任务异步

C# 取消WebClient下载任务异步,c#,xamarin,xamarin.android,webclient,cancellation,C#,Xamarin,Xamarin.android,Webclient,Cancellation,我有一个用于下载文件的网络客户端。 这是我的代码,其中有一个ProgressDialog和一个WebClient可供下载: dialog = new ProgressDialog(mContext); dialog.SetProgressStyle(Android.App.ProgressDialogStyle.Horizontal); dialog.SetCancelable(true); dial

我有一个用于下载文件的网络客户端。
这是我的代码,其中有一个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

当内部异常为null时,异常处理代码中存在问题。要使其工作,只需使用“”检查内部异常


当内部异常为null时,异常处理代码中存在问题。要使其工作,只需使用“”检查内部异常


您会遇到什么异常?堆栈跟踪是什么?@StephenCleary“System.NullReferenceException:对象引用未设置为对象的实例”请发布。@StephenCleary使用完整堆栈跟踪编辑。您是否尝试过对webClient使用私有变量,或者更好地使用私有锁定的单例?您会遇到什么异常,堆栈跟踪是什么?@StephenCleary“System.NullReferenceException:对象引用未设置为对象的实例”请发布。@StephenCleary使用完整堆栈跟踪进行编辑。您是否尝试为webClient使用私有变量或更好的私有锁定单例?
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;
                    }