2011-03-12 12 views
1

私はWindows Phone 7用のツイッターアプリケーションを開発しており、プロトタイプを行っています。私はアプリケーション上のいくつかのオブジェクトをminipulatingときに問題に出くわしました。 Dispatcher.BeginInvoke(new ThreadStart (doProgressBar));私は、バックグラウンドワーカースレッドを使ってdoProgressBar()を実行しようとしましたが、同じ効果があります。以下のコードはちょうどハングします(何も動かず、検索は更新されません)。ショーにブレークポイントをつけて、それがdoProgressBar()に当たると正しく動作しているようです。Windows Phone 7スレッドの問題

何が間違っているのか理解する助けとなることは感謝します。なぜ私は少なくともプログレスバーの更新を見ていないのかわかりません。私はまた、何かが別のスレッドで動いているときにメインスレッドがハングするのは本当に混乱しています。おそらく、理解しなければならないモバイルアプリケーションにスレッディングに関する何かがありますか?

public MainPage() 
    { 
     InitializeComponent(); 
    } 

    private void ProcessIncommingSearch(TwitterSearchResult searchResult, TwitterResponse response) 
    { 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      foreach (var status in searchResult.Statuses) 
      { 
       TwitterStatus inline = status; 
       Tweet tweet = new Tweet(inline); 
       Dispatcher.BeginInvoke(() => lboxTweets.Items.Add(tweet)); 
      } 
     } 
    } 

    private void image1_ManipulationStarted(object sender, ManipulationStartedEventArgs e) 
    { 
     Dispatcher.BeginInvoke(() => lboxTweets.Items.Clear()); 
     Dispatcher.BeginInvoke(new ThreadStart (doProgressBar)); 
     TwitterService ts = GlobalVariables.Service(); 
     ts.Search(txtSearch.Text, ProcessIncommingSearch); 
    } 

    private void doProgressBar() 
    { 
     while (progressBar1.Value <= 100) 
     { 
      progressBar1.Value += 1; 
     } 
    } 

    private void txtSearch_GotFocus(object sender, RoutedEventArgs e) 
    { 
     txtSearch.Text = ""; 
    } 

    private void txtPage_ManipulationStarted(object sender, ManipulationStartedEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
+0

silverlightツールキットの通常のプログレスバーまたはパフォーマンスプログレスバーを使用していますか? TwitterServiceとは何ですか?自家製または既存の図書館? –

+0

進捗バーのxamlを次に示します。。 Twitterserviceはtweetsharpライブラリからのものです。プログレスバーの更新がなくても正常に動作します。 –

答えて

1

私はここにあなたのコードを理解することはほとんど困難を抱えているが、あなたはDispatcher.BeginInvoke(new ThreadStart (doProgressBar));を呼び出すときにUIスレッドから新しいスレッドを起動しているように見えます。つまり、実際にはUIスレッドでdoProgressBarが実行されていないことを意味します。したがって、完了後にUIスレッドが更新をトリガーするまで、更新は表示されません。

また、あなたのコードはprogressBar.Valueから記録時に100回転するだけで、おそらくそれが更新されるのを見るよりも速くなります。

また、Dispatcher.BeginInvoke(() => doProgressBar());のコメントアウトがあります。コードのどこにも表示されません。適切なバージョンを投稿してもよろしいですか?

+0

私はコードを更新しました。私はそのメソッドを呼び出すいくつかの異なる方法を試し、間違ったものを残しました!私が今までに完全に伝えることはできません。なぜか分からない。 –

関連する問題