Окно сообщения появляется на неправильной странице wp7 - PullRequest
1 голос
/ 07 декабря 2011

У меня есть страница, которая извлекает данные из веб-службы с помощью асинхронного вызова. Если я получаю ответ от веб-службы управления, идет, чтобы поймать, где окно сообщения передается. Код приведен ниже:

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

Проблема: когда страница загружается, она начинает извлекать данные из веб-службы (рассмотрим случай, когда веб-служба не отвечает, и управление переходит к отлову части). В то же время, если мы нажмем кнопку «Назад» или перейдем по странице, появится окно с сообщением на новой странице.

Как я могу это остановить.

Спасибо и всего наилучшего

Ответы [ 3 ]

0 голосов
/ 07 декабря 2011

исправил эту проблему, добавив

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");
    });
                    }
            }
0 голосов
/ 08 декабря 2011

Наконец-то решил.

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. Если оно совпадает со страницей, с которой инициируется окно сообщения, в противном случае оно не появляется.

0 голосов
/ 07 декабря 2011

Не проверял его, но он может работать:

1 / Сохраните значение свойства NavigationService.CurrentSource где-нибудь, где его можно получить (лучшее будет в параметре asyncState, но свойство можетработать также

2 / В HandleForecastResponse сравните старое и новое значение NavigationService.CurrentSource. Таким образом, вы сможете определить, изменилась ли активная страница или нет.

...