2017-03-01 8 views
0

xamarin.formsでactivityindicatorを使用したいと思いますが、Activityindicatorは画面の中央で正常に表示されますが、回転するアニメーションは停止しており、一部の記事は消えていますが、 helped.Iは、他のデバイスでテストしていませんが、あなたはそれのために構築されていない何かをachiveしようcodes-Activityindicatorは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で「何らかの理由で」実行され、スピナーが停止する理由を説明できる場合... –

+0

ありがとう返答する、はい、メインスレッドで実行する、私はスピン停止理由を知っている、ちょうど適切な解決策を探す –

答えて

0

ですそれはAndroid.Hereで仕事をdoesnot。長時間実行されているタスクでメインスレッドをブロックすると、メインスレッドにアクティビティインジケータをスローする必要があります。その理由は何ですか?彼は長時間の仕事で忙しいです。

あなたは2つのオプションがあります。

1)は、単に、(それが推奨方法です)

2)あなたの活動の指標のようなアニメーションを(表示しない)、メインスレッドで長時間実行されるタスクを実行しないでくださいユーザーに静的なメッセージを表示します。「これはしばらく時間がかかる可能性があります。

しかし、私はあなたにオプション2をお勧めしません。なぜですか? Androidシステムでは、メインスレッドを長時間ブロックしたときにアプリが応答していないことが検出され、「応答しないアプリ。待っていますかキャンセルしますか?」などのメッセージが表示される場合があります。特に、メインスレッドがブロックされ、ユーザーがそのスレッドを数回タップすると、...

+0

はい、私はあなたに同意し、私は答えを受け入れるだろうが、その前に私は質問をしたい - 私は主なスレッドで実行する必要がある長い実行中のタスク(何らかの理由で私はバックグラウンドでは必要ありません)、この場合はアニメーション(任意のアニメーション)を表示したい、静的なメッセージを表示するため...アプリケーションがハングアップしていると思っています。どのようにしてどのようなタイプのアニメーションを表示できるので、ユーザーはアプリケーションがアクティブだと思うでしょう。 –

+0

できません。メインスレッドをブロックするため、これは不可能です。 1つの可能な方法は、あなたのケースでこれが可能なときにあなたの仕事を分割し、1つの部分が完成するたびに、ユーザーが知っていること、何か起こり、アプリがブロックされていないことをアップデートすることです。 – Joehl

+0

残念ながら私はこれを行うことはできません.. –

関連する問題