【问题标题】:Message Box popping on wrong page wp7消息框弹出错误页面wp7
【发布时间】:2011-12-08 17:32:36
【问题描述】:

我有一个使用异步调用从网络服务获取数据的页面。 如果我得到来自 web 服务控制的响应去捕捉一个消息框被大便。 代码如下:

string uri = "http://free.worldweatheronline.com/feed/weather.ashx?key=b7d3b5ed25080109113008&q=Mumbai&num_of_days=5";
            UriBuilder fullUri = new UriBuilder("http://free.worldweatheronline.com/feed/weather.ashx");
            fullUri.Query = "key=b7d3b5ed25080109113008&q=Mumbai&num_of_days=5";
            HttpWebRequest forecastRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);

            // set up the state object for the async request
            ForecastUpdateState forecastState = new ForecastUpdateState();
            forecastState.AsyncRequest = forecastRequest;

            // start the asynchronous request
            forecastRequest.BeginGetResponse(new AsyncCallback(HandleForecastResponse), forecastState);

这部分是回应

private void HandleForecastResponse(IAsyncResult asyncResult)
            {

                try
                {

                // get the state information
                ForecastUpdateState forecastState = (ForecastUpdateState)asyncResult.AsyncState;
                HttpWebRequest forecastRequest = (HttpWebRequest)forecastState.AsyncRequest;

                // end the async request
                forecastState.AsyncResponse = (HttpWebResponse)forecastRequest.EndGetResponse(asyncResult);

                Stream streamResult;
                string newCityName = "";
                //int newHeight = 0;


                // get the stream containing the response from the async call
                streamResult = forecastState.AsyncResponse.GetResponseStream();

                // load the XML
                XElement xmlWeather = XElement.Load(streamResult);

                }
                catch (Exception ex)
                {
                    MessageBox.Show("Connection Error");
                }
            }

问题: 当页面被加载时,它开始从 web 服务获取数据(考虑 web 服务没有响应并且控制去捕获部分的情况)。 同时,如果我们按下后退按钮或浏览页面,消息框会在新页面上弹出。

我怎么能阻止它。

感谢和问候

【问题讨论】:

    标签: c# silverlight windows-phone-7 messagebox


    【解决方案1】:

    尚未测试,但它可能有效:

    1/ 将 NavigationService.CurrentSource 属性的值存储在可以检索的位置(最好是在 asyncState 参数中,但属性也可以工作

    2/ 在 HandleForecastResponse 中,比较 NavigationService.CurrentSource 的新旧值。这样,您应该能够推断出活动页面是否已更改。

    【讨论】:

    • 这个解决方案也可以,但找到了一个直接的解决方案。
    【解决方案2】:

    通过添加解决了这个问题

    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
    });
    

    试试这个

    private void HandleForecastResponse(IAsyncResult asyncResult)
                    {
    
                        try
                        {
    
                        // get the state information
                        ForecastUpdateState forecastState = (ForecastUpdateState)asyncResult.AsyncState;
                        HttpWebRequest forecastRequest = (HttpWebRequest)forecastState.AsyncRequest;
    
                        // end the async request
                        forecastState.AsyncResponse = (HttpWebResponse)forecastRequest.EndGetResponse(asyncResult);
    
                        Stream streamResult;
                        string newCityName = "";
                        //int newHeight = 0;
    
    
                        // get the stream containing the response from the async call
                        streamResult = forecastState.AsyncResponse.GetResponseStream();
    
                        // load the XML
                        XElement xmlWeather = XElement.Load(streamResult);
    
                        }
                        catch (Exception ex)
                        {
        System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
                                              {
                            MessageBox.Show("Connection Error");
        });
                        }
                }
    

    【讨论】:

      【解决方案3】:

      终于解决了。

      catch (Exception x)
                  {
                      Deployment.Current.Dispatcher.BeginInvoke(() =>
                      {
                          var currentPage = ((App)Application.Current).RootFrame.Content as PhoneApplicationPage;
                          if ((currentPage.ToString()).Equals("MumbaiMarathon.Info.News"))
                          {
                              MessageBox.Show("Connection Error");
                          }
                      });
                  }
      

      我刚刚在弹出消息框时检查了当前 UI 应用程序页面的名称。如果它与启动消息框的页面相同,则不会弹出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        • 2012-09-06
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多