3

ビューにプログレスバーを表示できません。本当に嬉しいのは、ボタンをクリックすると、サーバーからjsonファイルの読み取りが開始されますが、それが完了するまで、ビューにプログレスバーを追加しても何もできません。ロードされると、すべてが機能し始め、プログレスバーが表示されます。

ボタンをクリックすると、完了後にプログレスバーが表示され始めるようにするには、これをどのように実現できますか。却下機能をトリガーしてプログレスバーを閉じます。

これが私のスクリプトです:

これは、ボタントリガーで関数の呼び出しを開始し、プログレスバーをビューに追加する関数です。

this.View.Add (loadingOverlay);
Getjsondata("http://polarisnet.my/polaristouchsales/Import/Products/product.json");
loadingOverlay.Hide ();

これがGetjson関数です

 public string Getjsondata(string URL)
        {
            HttpWebRequest request = null;
            StreamReader responseReader = null;
            string responseData = "";

            try
            {
                request = (HttpWebRequest)HttpWebRequest.Create(URL);
                responseReader = new StreamReader(request.GetResponse().GetResponseStream());
                responseData = responseReader.ReadToEnd();
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                request.GetResponse().GetResponseStream().Close();
                responseReader.Close();
                responseReader = null;
            }

            return responseData;

        }
4

1 に答える 1

7

Getjsondataは、次のような別のスレッドで実行する必要があります。

this.View.Add (loadingOverlay);
ThreadPool.QueueUserWorkItem (() =>
{
    Getjsondata("http://polarisnet.my/polaristouchsales/Import/Products/product.json");
    BeginInvokeOnMainThread (() =>
    {
        loadingOverlay.Hide ();
    });
});

これで、ダウンロード中にメインスレッドがブロックされることはなく、ダウンロードの進行中にUIの更新を続行できます。

また、MonoTouchでのスレッド化に関するドキュメントも読む必要があります。これは、できることとできないことを少し説明しています。

于 2012-12-13T08:56:02.453 に答える