2011-12-07 4 views
1

私は非同期呼び出しを使用してWebサービスからデータを取得しているページを持っています。 Webサービスコントロールからの応答が得られたら、メッセージボックスがどこにあるかをキャッチするようになります。 コードは以下の通りです:Webサービスがあるときに、ページがロードされるときに それがWebサービスからデータをフェッチを開始(ケースを考えてみます。この部分はメッセージボックスが間違ったページでポップする

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

問題応答である

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

応答せず、制御は部分をキャッチする)。 一方、戻るボタンを押すかページを移動すると、新しいページのメッセージボックスがポップアップします。

どうすればいいですか?

おかげで、よろしく

答えて

0

は最終的にそれを解決してみてください

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

を追加することにより、その問題をifixed。

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

はそれをテストしていませんが、それが動作することがあります。

1 /ストアNavigationService.CurrentSourceプロパティの値がどこかに(最高はasyncStateになり、検索することができますパラメータが、プロパティはNavigationService.CurrentSourceの古いものと新しい値を比較し、HandleForecastResponseにおいても

2 /を動作する可能性があります。このように、あなたは、アクティブなページが変更されたりしていない場合は推測することができるはずです。

+0

このソリューションも機能しますが、それに対してストレートな解決策が見つかりました。 – Mohit

0

この

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"); 
    }); 
        } 
      } 
関連する問題