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 回答