加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:51:53 所属栏目:百科 来源:网络整理
导读:我在浏览器中显示进度条时遇到问题.真正讨厌的是,当我点击按钮时,它开始从服务器读取json文件,但直到它还没有完成,你甚至无法做任何事情,甚至在视图中添加进度条.一旦加载,一切都开始工作并显示进度条. 你有什么想法我怎么能实现这一点,一旦我点击按钮它应该
我在浏览器中显示进度条时遇到问题.真正讨厌的是,当我点击按钮时,它开始从服务器读取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;

        }

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读