2017-03-01 76 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

不幸的是我不能這樣做.. –