【问题标题】:How to stop webrequest in windows phone 8.1 c#如何在 windows phone 8.1 c# 中停止 webrequest
【发布时间】:2015-08-13 14:55:54
【问题描述】:

我刚刚开始开发针对 windows phone 8.1 的应用程序。在我的应用程序中,我正在调用我的 Web 服务并从中获取结果。但是,当我在处理 Web 请求时单击硬件后退按钮时,页面会重定向到上一页,但我无法停止处理 Web 请求。得到响应后就会显示结果。

我的代码在这里:

  private async void accAcctDet_Click(object sender, RoutedEventArgs e)
    {
                string selected = acct[cmbAccDetail.SelectedIndex];
                string maskselect = cmbAccDetail.SelectedItem.ToString();
                prog.Visibility = Visibility.Visible;    
                acctdetails obj = new acctdetails();
                var result = await obj.GetToken(selected);                   
                if (result.Substring(0, 2) == "Se" || result.Substring(0, 2) == "Ki")
                {
                    prog.Visibility = Visibility.Collapsed;
                    MessageDialog msgbox = new MessageDialog("Service Unavailable. Please try again later", "e-Book!");
                    await msgbox.ShowAsync();
                    ContentRoot.Visibility = Visibility.Visible;
                    myCommandBar.Visibility = Visibility.Visible;
                }
                else
                {
                    prog.Visibility = Visibility.Collapsed;
                    this.Frame.Navigate(typeof(acctdetinfo), result);
                }
    }
    public async Task<string> GetToken(string selected)
    {
        string postData = "selAcct=" + selected;
        var res = await post("myparameter", postData);
        return res;
    }
    private async Task<string> post(string url, string postdata)
    {
        var request = WebRequest.Create(new Uri("myurl.com" + url)) as HttpWebRequest;
        request.Method = "POST";
        request.ContentType = "application/json";
        byte[] data = Encoding.UTF8.GetBytes(postdata);
        //request.ContentLength = data.Length;
        using (var requestStream = await Task<Stream>.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, request))
        {
            await requestStream.WriteAsync(data, 0, data.Length);
        }
        WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, request);
        var responseStream = responseObject.GetResponseStream(); 
        var sr = new StreamReader(responseStream);
        string received = await sr.ReadToEndAsync();
        return received;
    }

一旦用户单击硬件返回按钮,我需要停止请求。

任何帮助将不胜感激

【问题讨论】:

标签: c# windows-phone-8.1


【解决方案1】:

您可以添加bool 来检查用户是否已经离开

//Inside OnNavigatingFrom
...
hasNavigatedAway = true;
...

//Inside post(string url, string postdata)
if(hasNavigatedAway) return;

或者您可以使用CancellationToken 做某事,如回答here

【讨论】:

  • 感谢您的帖子。会检查并通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2016-08-02
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多