내 게임의 전투기 생성 페이지를 작성하고 있습니다. 페이지는 전투기가 서버에서 다운로드되는 동안 강도 및 기타 속성에 대한 무작위 값으로 UI를 업데이트합니다. 지금까지UI 블록에 여러 비동기 호출로 텍스트 블록 업데이트
코드 :
public partial class FighterGenerationPage : PhoneApplicationPage
{
Fighter fighter = null;
string Code = "";
BackgroundWorker worker;
public FighterGenerationPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(FighterGenerationPage_Loaded);
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
}
void FighterGenerationPage_Loaded(object sender, RoutedEventArgs e)
{
AddFighter();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
NavigationContext.QueryString.TryGetValue("code", out Code);
if ("".Equals(Code))
if (NavigationService.CanGoBack)
NavigationService.GoBack();
base.OnNavigatedTo(e);
}
private void AddFighter()
{
WebProxy.GetInstance().AddFighter(AddFighter_Handler, Code);
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
Random rand = new Random();
while (fighter == null)
{
int strength = rand.Next(100);
Dispatcher.BeginInvoke(() => { StrValue.Text = Convert.ToString(strength); });
Thread.Sleep(100);
}
Dispatcher.BeginInvoke(() => { StrValue.Text = Convert.ToString(fighter.Strength); });
}
public void AddFighter_Handler(Response response)
{
#if DEBUG
Thread.Sleep(3000);
#endif
if (response.Status.Error == false)
{
fighter = response.Fighter;
}
}
}
가이 코드는 거의 내가하고 싶은 일을, 대신 그것을 않는 모든 0.1 초 한 번이 설정 직전에 시작시 다음 여러 번 UI를 업데이트 않는다 그것은 최종 가치 (전투기. 힘)까지.
왜이 동작입니까?
아하 .. 당신이 달성하려고하는 것을 일시 중지 뭔가를 얻을 수있는 DispatcherTimer 사용을 고려 -
또한 아마하지 않을 권리 일이 .AddFighter (AddFighter_Handler, Code) 호출. 감사! – softarn