0

あるページから次のページへ、UI にバインドされている 1 つのプロパティがあり、この割合は 1 回の無駄な時間操作を必要とするため、ページが長時間表示されません。速度を改善する方法はありますか。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
    string value = string.Empty;
    IDictionary<string, string> queryString = this.NavigationContext.QueryString;
    if (queryString.ContainsKey("Type"))
    {
        this.Type = queryString["Type"];
        new Thread(() => {
            mtv.AddDistanceForList();
        }).Start();

    }
    else
    {
            GetMovieThreater();
    }
    base.OnNavigatedTo(e); }  

private void GetMovieThreater() {
    string movieId = PhoneApplicationService.Current.State["MovieId"] as string;

    mtv.SelectThreaterByMovie(movieId);
    mtv.AddDistanceForList();  }

View Model では次のようになります。

private ObservableCollection<Threater> threaters; public ObservableCollection<Threater> Threaters {
    get { return threaters; }
    set
    {
        if (threaters != value)
        {
            threaters = value;
            NotifyPropertyChanged("Threaters");
        }
    } }

private CollectionViewSource filteredThreater; public CollectionViewSource FilteredThreater {
    get { return filteredThreater; }
    set
    {
        filteredThreater = value;
        NotifyPropertyChanged("FilteredThreater");
    } } This function wate time!!! public void SelectThreaterByMovie(string movieId) {
    Threaters.Clear();

    if(MovieDataAllMovies.Threaters!=null)
    {
      foreach(var i in MovieDataAllMovies.MoviePlans){
          if (i.MovieId == movieId)
          {
              MovieDataAllMovies.Threaters.ForEach((e) =>
              {
                  if (i.TheaterId == e.Tid.ToString())
                  {
                      Threaters.Add(e);
                  }
              });
          }
      }
      Deployment.Current.Dispatcher.BeginInvoke(() =>
      {
          this.FilteredThreater.Source = Threaters;
      });    } }
4

1 に答える 1

0

長時間実行されている Web サービス呼び出しと対話するときにパフォーマンス プログレス バーを使用してこの種の状況を処理する方法についての非常に優れた記事があり、記事ページの下部にサンプル コードが用意されています。

Dan Clarke の言葉を引用すると、「Windows Phone 7 アプリにグローバル パフォーマンス プログレス バーを配置して、Web サービスと対話しているときにユーザーが一貫した参照フレームを使用できるようにしたいと考えています。要件は単純で、表示されるプログレス バーです。特別な要件なし (つまり、カスタム コントロール、特別なコード スニペットなど) なしですべてのページに適用できます。1 か所で管理し、簡単に拡張できる必要があります。幸い、Silverlight が提供する非常に高い柔軟性により、これは簡単です:" Source

このオプションを使用すると、少なくとも、ページが最小限で読み込まれているという考えが得られます。

于 2012-12-13T21:18:15.310 に答える