消息框弹出错误的页面wp7

时间:2011-12-07 10:00:39

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

我有一个页面,它使用异步调用从Web服务获取数据。 如果我从webservice控件获得响应,则捕获消息框已停止的位置。  代码如下:

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");
                }
            }

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

我怎么能阻止它。

谢谢和问候

3 个答案:

答案 0 :(得分:0)

没有测试过,但可能会有效:

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

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

答案 1 :(得分:0)

通过添加

来解决该问题
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");
    });
                    }
            }

答案 2 :(得分:0)

终于解决了它。

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应用程序页面的名称。如果它与启动消息框的页面相同,则不会弹出消息框。