如何在使用http请求读取json文件时在monotouch中显示进度条

时间:2012-12-13 04:37:59

标签: c# json xamarin.ios httprequest

我在浏览器中显示进度条时遇到问题。真正讨厌的是,当我点击按钮时,它开始从服务器读取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;

        }

1 个答案:

答案 0 :(得分:7)

您必须在单独的线程上执行Getjsondata,如下所示:

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

现在它不会在下载时阻止主线程,并且您可以在下载过程中继续更新UI。

您还应该阅读有关threading in MonoTouch的文档 - 它会解释您可以做什么以及不能做什么。