2017-03-01 75 views
0

我想在xamarin.forms中使用activityindicator,Activityindicator在屏幕中间显示成功,但旋转动画停止(卡住),已经通过一些文章,但它没有helped.I有没有在其他设备进行测试,但它在Android.Here不列入工作是codes-Activity指示符停止旋转Xamarin.forms

private async Task<string> getUrlString(string id) 
    { 
     string url = doSomeWork(id);\\its a long running process where it \\takes around 10 minutes to run,And I cant do it in background for some reasons 
     return url; 
    } 
    async void Handle_ItemSelected(object sender, Xamarin.Forms.SelectedItemChangedEventArgs e) 
    { 
     await DisplayAlert("", "something", "OK"); 
     activityindicator.IsRunning = true; 
     await Task.Delay(250);  int id=1; 
     var url =await getUrlString(id); 
     await Navigation.PushModalAsync(new playerPage()); 
     activityindicator.IsRunning = false; 
    } 
+0

如果你的任务在MainThread中运行“出于某种原因”,这可以解释为什么spinners停止... –

+0

感谢回答,是的,它在主线上运行,我知道旋转停止的原因,只是寻找适当的解决方案 –

回答

0

您尝试才达到是不是该建什么。当你用长时间运行的任务阻塞主线程时,你无法告诉主线程他应该旋转你的活动指示器......他为什么要这么做?他忙于长期运行的任务。

你有两个选择:

1)不要在主线程上执行长时间运行的任务(这是推荐的方式)

2)不显示动画(如您的活动的指标),只是向用户显示静态消息“这可能需要一段时间...耐心”。

但我高度不建议你选择2.为什么?当您长时间阻止主线程时,Android系统会检测到您的应用程序未响应,并且可能会向用户显示一条消息,如“应用程序未响应,您想等待还是取消?”。特别是当主线程被阻塞并且用户在其上点击几次时...

+0

是的,我同意你的意见,我会接受答案,但在此之前我想问一个问题 - 假设我有一个问题长时间运行的任务,我必须在主线程中运行(由于某种原因,我不想在后台),在这种情况下我想显示动画(任何动画),因为显示静态消息...,可能是用户意志认为应用程序已挂起。因此,如何显示任何类型的动画,以便用户认为应用程序处于活动状态。 –

+0

您不能。这是不可能的,因为你阻止了主线程。一种可能的方式是,你(当你的情况可能会发生这种情况时)将你的任务分成小块,每一部分完成后,你更新你的UI,用户知道,发生了什么,应用程序没有被阻止 – Joehl

+0

不幸的是我不能这样做.. –