2011-03-12 6 views
1

저는 Windows Phone 7 용 트위터 응용 프로그램을 개발 중이며 프로토 타이핑을하고 있습니다. 응용 프로그램에서 일부 개체를 minipulating 때 문제가 발생했습니다. 아래 코드는 단지 멈 춥니 다 (아무 것도 이동하지 않고 검색이 업데이트되지 않습니다). Dispatcher.BeginInvoke(new ThreadStart (doProgressBar)); 나는 배경 작업자 스레드를 사용하여 doProgressBar()을 실행했지만 동일한 효과를 보았습니다. 쇼에 breakpoint를 쓰면 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 툴킷의 일반 진행률 표시 줄이나 성능 진행률 표시 줄을 사용합니까? 트위터 서비스 란 무엇입니까? 집에서 만든 라이브러리 또는 기존 라이브러리? –

+0

다음은 진행률 표시 줄에 대한 xaml입니다. . Twitterservice는 tweetsharp 라이브러리의 것입니다. 진행률 표시 줄 업데이트 없이는 제대로 작동합니다. –

답변

1

나는 여기에 코드를 이해하는데 약간의 어려움을 겪고있어,하지만 당신은 Dispatcher.BeginInvoke(new ThreadStart (doProgressBar));를 호출 할 때 UI 스레드에서 새 스레드를 호출 할 것 같습니다. 즉, 실제로는 UI 스레드에서 doProgressBar이 실행되고 있지 않으므로 완료 후 UI 스레드가 업데이트를 트리거 할 때까지 업데이트가 표시되지 않습니다.

또한 코드는 progressBar.Value에서 100 시간으로 회전하며, 업데이트 할 때보 다 더 빠를 수도 있습니다.

또한 언급하신 내용이 Dispatcher.BeginInvoke(() => doProgressBar());입니다. 코드에서 아무 것도 볼 수 없습니다. 올바른 버전을 게시 했습니까?

+0

코드를 업데이트했습니다. 나는 그 방법을 부르는 몇 가지 다른 방법을 시도하고 틀린 것을 남겼습니다! 내가 완성 할 수있는 한 멀리 있지 않습니다. 나는 왜 그런지 이해하지 못한다. –